MySQL
Dengue
- datenbank
Hallo,
ich probiere nun schon seit einer Weile ohne Erfolg, folgende SQL-Anweisung mit Joins so umzuformen, dass die Unterabfrage wegfällt:
SELECT ID
FROM t1
WHERE t1.ID != ALL(SELECT BUID FROM t1 WHERE BUID != '')
Ich möchte nämlich, dass die Abfrage auch auf Servern mit einer älteren Version funzt.
Fällt euch dazu was ein?
Danke für eure Mühe.
MfG
Dengue
Hallo,
ich probiere nun schon seit einer Weile ohne Erfolg, folgende SQL-Anweisung mit Joins so umzuformen, dass die Unterabfrage wegfällt:
SELECT ID
FROM t1
WHERE t1.ID != ALL(SELECT BUID FROM t1 WHERE BUID != '')
ich vermute, Du suchst einen Selfjoin in der Form als OUTER JOIN mit der Prüfung auf IS NULL.
Freundliche Grüße
Vinzenz
Hello,
ich vermute, Du suchst einen Selfjoin in der Form als OUTER JOIN mit der Prüfung auf IS NULL.
*args* ich sollte genauer hingucken != ALL ist selbstverständlich was völlig anderes als = ALL.
MfG
Rouven
Super, vielen Dank. Es funzt. So ähnlich hatte ich es auch, nur dass ich in der where-Klausel die ID und nicht die BUID auf NULL geprüft habe. Wie dumm von mir. Da kann das ja gar nicht gehen.
MfG
Dengue
yo,
ich probiere nun schon seit einer Weile ohne Erfolg, folgende SQL-Anweisung mit Joins so umzuformen, dass die Unterabfrage wegfällt:
mit Joins läßt sich nicht alles abbilden. liegen den besondere gründe vor, dass es auf älteren servern auch laufen soll ?
aber in deinem falle gibt es zum glück eine lösung, OUTER JOIN ist dein freund. wobei mir noch nicht ganz klar ist ob es sich bei dir um einen selfjoin handelt oder um zwei verschiedene tabellen, weil du sich gleich benanntn hast. aber ich gehe mal von einem selfjoin aus.
SELECT tab1.*
FROM tabelle1 tab1
LEFT JOIN tabelle1 tab2 ON tab1.id = tab2.buid
WHERE tab2.buid IS NULL
;
Ilja
Hello,
SELECT ID
FROM t1
WHERE t1.ID != ALL(SELECT BUID FROM t1 WHERE BUID != '')
^^^^^^
das ist dein Problem, was sich mit einem JOIN nur sehr unschön lösen lässt, weil der JOIN selbst nicht weiß, wieviel ALL ist.
Was mit dazu nur einfällt ist:
(1) INNER JOIN, damit nur paarweise Übereinstimmungen gelten
(2) GROUP BY ID
(3) HAVING COUNT(ID) = Anzahl der Datensätze in der anderen Tabelle die relevant sind als korrelierte Unterabfrage.
Aber in Kurz: du wirst Spaß kriegen...
MfG
Rouven
--
\-------------------
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& ([SelfCode](http://selfspezial.atomic-eggs.com/scode/selfcode.php?encodieren))
I will never understand why Germans feel the need to kill trees -- Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
Hallo,
Ich möchte nämlich, dass die Abfrage auch auf Servern mit einer älteren Version funzt.
Fällt euch dazu was ein?
hmm ein vernünftiges Tabellendesign?
Denn deine Abfrage sieht mehr als merkwürdig aus
Ansonsten kann ich dir diese Seite im MySQL Manual empfehlen:
http://dev.mysql.com/doc/refman/4.1/en/rewriting-subqueries.html
Wie dir hoffentlich bekannt ist, ist <> ALL das gleiche wie NOT IN.
Und:
SELECT * FROM t1 WHERE id NOT IN (SELECT id FROM t2);
Kann geschrieben werden als:
SELECT table1.* FROM table1
LEFT JOIN table2 ON table1.id=table2.id
WHERE table2.id IS NULL;
Ansonsten:
Mach zwei Abfragen davon.
Grüße
Klaus