Heim > Datenbank > MySQL-Tutorial > Wie kann man die Unterabfragebeschränkungen der DELETE-Anweisung von MySQL umgehen?

Wie kann man die Unterabfragebeschränkungen der DELETE-Anweisung von MySQL umgehen?

Patricia Arquette
Freigeben: 2025-01-10 18:17:10
Original
407 Leute haben es durchsucht

How to Work Around MySQL's DELETE Statement Subquery Restrictions?

Navigieren durch die DELETE-Anweisungs-Unterabfragebeschränkungen von MySQL

Die

-Anweisung von DELETEMySQL kann manchmal den Fehler „Sie haben einen Fehler in Ihrer SQL-Syntax …“ auslösen, wenn sie mit einer Unterabfrage in der WHERE-Klausel verwendet wird. Diese Einschränkung ergibt sich aus den Einschränkungen von MySQL hinsichtlich der Referenzierung der Zieltabelle innerhalb der Unterabfrage.

Illustrativer Abfrage- und Syntaxfehler

Untersuchen wir eine Abfrage, die darauf ausgelegt ist, Einträge aus der Tabelle term_hierarchy basierend auf einer Unterabfragebedingung zu löschen:

<code class="language-sql">DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (
SELECT DISTINCT(th1.tid)
FROM term_hierarchy AS th1
INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
WHERE th1.parent = 1015
);</code>
Nach dem Login kopieren

Diese Abfrage schlägt fehl, weil MySQL die Verwendung der zu löschenden Tabelle (term_hierarchy) innerhalb der WHERE-Klausel der Unterabfrage nicht zulässt.

Lösung: Verschachtelte Unterabfragen

Die Lösung liegt in der Verschachtelung der Unterabfrage:

<code class="language-sql">DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (
SELECT id
FROM (SELECT DISTINCT(th1.tid) AS id
FROM term_hierarchy AS th1
INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
WHERE th1.parent = 1015) x
);</code>
Nach dem Login kopieren

Erläuterung der Lösung

Durch Kapselung der ursprünglichen Unterabfrage (SELECT DISTINCT(th1.tid)) in einer anderen Unterabfrage (SELECT id FROM (...)) erstellen wir eine temporäre, abgeleitete Tabelle (x). MySQL kann diese temporäre Tabelle dann sicher in der DELETE-Klausel der WHERE-Anweisung verwenden und so die ursprüngliche Einschränkung effektiv umgehen.

Zusammenfassung

Während MySQL die Verwendung von Unterabfragen in DELETE-Anweisungen einschränkt, bietet diese Technik mit verschachtelten Unterabfragen eine praktische Problemumgehung für die Durchführung komplexer Löschvorgänge, die andernfalls durch Standardsyntaxregeln blockiert würden.

Das obige ist der detaillierte Inhalt vonWie kann man die Unterabfragebeschränkungen der DELETE-Anweisung von MySQL umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage