Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Problem mit Exists (https://www.delphipraxis.net/77737-problem-mit-exists.html)

alcaeus 24. Sep 2006 10:51

Datenbank: mySQL • Version: 4.0.26 • Zugriff über: PHP-Funktionen

Problem mit Exists
 
Moin,

ich habe ein kleines Problem. Ich will folgendes Query ausfuehren:
SQL-Code:
DELETE FROM phpbb_topics_watch wt
  WHERE NOT EXISTS (
    SELECT topic_id FROM phpbb_topics t
    WHERE t.topic_id = wt.topic_id
  )
Der Server quittiert dies allerdings mit folgender Fehlermeldung:
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'wt WHERE NOT EXISTS (SELECT user_id FROM phpbb_users


Auch folgendes Query funktioniert nicht, also liegt es nicht am DELETE, sondern wirklich am EXISTS:
SQL-Code:
SELECT wt.* FROM phpbb_topics_watch wt
  WHERE NOT EXISTS (
    SELECT topic_id FROM phpbb_topics t
    WHERE t.topic_id = wt.topic_id
  )
Das mySQL-Manual unterscheidet hier nicht zwischen 3.23, 4.0 und 4.1, gibt es EXISTS ueberhaupt in mySQL 4.0? Wenn nicht, wie kann ich dasselbe anders loesen, ohne zuerst manuell das Subquery auszufuehren zu muessen, und dann die IDs manuell in das Query reinzuschieben?

Greetz
alcaeus

marabu 24. Sep 2006 10:59

Re: Problem mit Exists
 
Hallo Andreas,

MySQL 4.0 kennt keine SubSelects mit EXISTS. Das Kapitel im Handbuch (1.7.4.1 SubSelects) zeigt dir eine alternative Syntax.

Grüße vom marabu

alcaeus 24. Sep 2006 11:09

Re: Problem mit Exists
 
Moin,

danke fuer den Hinweis. Welches Handbuch meinst du? Das Online-Handbuch behandelt in 1.7.4.1 was anderes. Meinst du Subqueries mit ANY bzw. ALL? Wenn ja, koenntest du mir bitte ein kleines Beispiel dazu geben? Ich versteh das Handbuch da nicht wirklich, bzw. weiss nicht wie ich die anwenden sollte :oops:

Greetz
alcaeus

marabu 24. Sep 2006 11:13

Re: Problem mit Exists
 
Ich hatte im Online-Handbuch (HTML-Doku) von 4.0.5 nachgesehen:

Zitat:

1.7.4 MySQL Differences Compared to ANSI SQL92
...
1.7.4.1 SubSELECTs
...
The queries:

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2
WHERE table1.id=table2.id);

Can be rewritten as:

SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;
Vielleicht hilft dir das weiter

marabu

alcaeus 24. Sep 2006 11:15

Re: Problem mit Exists
 
Oh, das ist nochmal einfacher als ich dachte, vielen Dank :)

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz