Supportnet / Forum / Datenbanken
Wie mach ich diese MySQL Abfrage richtig?
Frage
Gern würde ich diese Abfrage erzeugen:
$res = mysql_query("SELECT A,B FROM Tabelle1, Tabelle2 WHERE NOT A = B");
Also im Prinzip soll mir der Computer sagen, welche Daten von A eben NICHT in B enthalten sind. Leider kennt offenbar MySQL den Befehl WHERE NOT nicht. Weiß jemand wie man das richtig macht?
Claudia Gauss aus Wien
Antwort 1 von DukeNT
Hi Claudia,
Bin zwar nicht so der Held in SQL aber hast du es schon mal mit ".....WHERE A <> B" versucht?
Bin zwar nicht so der Held in SQL aber hast du es schon mal mit ".....WHERE A <> B" versucht?
Antwort 2 von bored
... öhm...
Aber was soll diese Abfrage???
Beispiel:
Tab1 enthält 10 Datensätze, Tab2 ebenfalls. Wenn du jetzt diese Abfrage machst, erhälst du schlimmstenfalls 100 Zeilen ausgegeben, nämlich wenn A und B niemals gleich sind.
Selbst wenn es zu jedem Datensatz aus Tab1 genau einen dazu passenden Datensatz in Tab2 gibt, dann bekommst du immer noch 90 angezeigte Ergebnisse.
Kleines Beispiel:
Tab1
Tab2
Ergebnis aus deiner Abfrage:
Also, was bringt dir das?
SELECT A,B FROM Tabelle1, Tabelle2 WHERE A != BAber was soll diese Abfrage???
Beispiel:
Tab1 enthält 10 Datensätze, Tab2 ebenfalls. Wenn du jetzt diese Abfrage machst, erhälst du schlimmstenfalls 100 Zeilen ausgegeben, nämlich wenn A und B niemals gleich sind.
Selbst wenn es zu jedem Datensatz aus Tab1 genau einen dazu passenden Datensatz in Tab2 gibt, dann bekommst du immer noch 90 angezeigte Ergebnisse.
Kleines Beispiel:
Tab1
feld A feld C
1 2
2 4
3 6Tab2
feld B feld D
1 9
2 6
3 1Ergebnis aus deiner Abfrage:
feld A feld B
1 2
1 3
2 1
2 3
3 1
3 2Also, was bringt dir das?
Antwort 3 von ClaudiaGauss
Mir ist zum heulen, Keiner versteht mich :-(
Ich habe eine Tabelle mit 3000 Namen und ich will eine Abfrage um DIE zu finden die noch nicht in MEINER Tabelle enthalten sind.
Wie muss ich den da vorgehen?
Biitte helf mir. :-(
Ich hab auch schon != und <> probiert.
Nix funktioniert.
Gibt da den keine Lösung?
Ich habe eine Tabelle mit 3000 Namen und ich will eine Abfrage um DIE zu finden die noch nicht in MEINER Tabelle enthalten sind.
Wie muss ich den da vorgehen?
Biitte helf mir. :-(
Ich hab auch schon != und <> probiert.
Nix funktioniert.
Gibt da den keine Lösung?
Antwort 4 von draack
Hi,
das sollte sein, was du suchst:
Tschö,
Volker
das sollte sein, was du suchst:
SELECT Tabelle1.A
FROM Tabelle1
LEFT JOIN Tabelle2 ON Tabelle1.A=Tabelle2.B
WHERE Tabelle2.B IS NULL;Tschö,
Volker
Antwort 5 von draack
Hi,
das ganze mit einer Subquery. Das ist vielleicht leichter zu lesen und zu verstehen als die obige Lösung - dafür dürfte die Lösung über einen JOIN deutlich performanter sein (und wird auch von allen MySQL Versionen unterstützt):
Tschö,
Volker
P.S.: Diese Lösung ist "suboptimal" - nicht verwenden. So programmiert nur jemand mit SQL, der wenig Ahnung von SQL hat.
das ganze mit einer Subquery. Das ist vielleicht leichter zu lesen und zu verstehen als die obige Lösung - dafür dürfte die Lösung über einen JOIN deutlich performanter sein (und wird auch von allen MySQL Versionen unterstützt):
SELECT DISTINCT Tabelle1.A
FROM Tabelle1, Tabelle2
WHERE Tabelle1.A NOT IN (SELECT Tabelle2.B FROM Tabelle2);Tschö,
Volker
P.S.: Diese Lösung ist "suboptimal" - nicht verwenden. So programmiert nur jemand mit SQL, der wenig Ahnung von SQL hat.

