Rechercher dans le manuel MySQL
C.4 Restrictions on Subqueries
In general, you cannot modify a table and select from the same table in a subquery. For example, this limitation applies to statements of the following forms:
Exception: The preceding prohibition does not apply if for the modified table you are using a derived table and that derived table is materialized rather than merged into the outer query. (See Section 8.2.2.4, “Optimizing Derived Tables, View References, and Common Table Expressions with Merging or Materialization”.) Example:
Here the result from the derived table is materialized as a temporary table, so the relevant rows in
t
have already been selected by the time the update tot
takes place.In general, you may be able to influence the optimizer to materialize a derived table by adding a
NO_MERGE
optimizer hint. See Section 8.9.3, “Optimizer Hints”.Row comparison operations are only partially supported:
For
,expr
[NOT] INsubquery
expr
can be ann
-tuple (specified using row constructor syntax) and the subquery can return rows ofn
-tuples. The permitted syntax is therefore more specifically expressed asrow_constructor
[NOT] INtable_subquery
For
,expr
op
{ALL|ANY|SOME}subquery
expr
must be a scalar value and the subquery must be a column subquery; it cannot return multiple-column rows.
In other words, for a subquery that returns rows of
n
-tuples, this is supported:But this is not supported:
The reason for supporting row comparisons for
IN
but not for the others is thatIN
is implemented by rewriting it as a sequence of=
comparisons andAND
operations. This approach cannot be used forALL
,ANY
, orSOME
.Subqueries in the
FROM
clause cannot be correlated subqueries. They are materialized in whole (evaluated to produce a result set) during query execution, so they cannot be evaluated per row of the outer query. The optimizer delays materialization until the result is needed, which may permit materialization to be avoided. See Section 8.2.2.4, “Optimizing Derived Tables, View References, and Common Table Expressions with Merging or Materialization”.MySQL does not support
LIMIT
in subqueries for certain subquery operators:MySQL permits a subquery to refer to a stored function that has data-modifying side effects such as inserting rows into a table. For example, if
f()
inserts rows, the following query can modify data:This behavior is an extension to the SQL standard. In MySQL, it can produce nondeterministic results because
f()
might be executed a different number of times for different executions of a given query depending on how the optimizer chooses to handle it.For statement-based or mixed-format replication, one implication of this indeterminism is that such a query can produce different results on the master and its slaves.
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 26/06/2006 gemaakt, de laatste keer de 26/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/mysql-rf-subquery-restrictions.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.
Referenties
Deze verwijzingen en links verwijzen naar documenten die geraadpleegd zijn tijdens het schrijven van deze pagina, of die aanvullende informatie kunnen geven, maar de auteurs van deze bronnen kunnen niet verantwoordelijk worden gehouden voor de inhoud van deze pagina.
De auteur Deze site is als enige verantwoordelijk voor de manier waarop de verschillende concepten, en de vrijheden die met de referentiewerken worden genomen, hier worden gepresenteerd. Vergeet niet dat u meerdere broninformatie moet doorgeven om het risico op fouten te verkleinen.