1 Feld von 2 Tabellen vergleichen und ungleiche Ergebniss ausgeben

Admi

Erfahrenes Mitglied
Hallo

Ich habe 2 Tabellen, in den Seriennummern stehen.

Tabelle 1 enthält alle vergebenen Nummern. Tabelle 2 enthält alle möglichen Nummern.

Jetzt möchte ich diese gerne vergleichen und alle Nummern in einer Auswahlliste (Dropdown) anzeigen lassen, die nur in einer der beiden Tabellen vorhanden sind.

Die gleichartigen Nummern interessieren nicht mehr, da diese vergeben sind.

Ich hatte es mal so versucht, komme aber zu keinem Ergebnis:

PHP:
$sql = 'SELECT 
`udb_sb`.`sb` AS `sb2`
`udb_udb`.`sb_nummer` AS `sb3`
FROM `udb_sb`
LEFT JOIN `udb_udb` ON `udb_sb`.`sb` = `udb_udb`.`sb_nummer`
WHERE `udb_sb`.`frb` != `udb_udb`.`sb_nummer`';
$sql2 = mysql_query($sql);

Wenn ich aus dem != ein = mache, dann haut er mir alle Nummern raus, die in beiden Tabellen vorkommen. Bei != passiert aber leider garnix. Woran kann das liegen? Welches Zauberwort könnte mir helfen, bzw wo liegt der Syntaxfehler (auch wenn mir keiner angezeigt wird - nur eine leere Liste.
 
Zuletzt bearbeitet:
Hallo,

die vergebenen Nummern wirst du doch nicht wirklich nochmal in das Select hauen wollen oder? Wie auch immer...

Möglichkeit 1 - LEFT JOIN:
PHP:
SELECT a.id
FROM seriennummern AS a
	LEFT JOIN vergeben AS b ON a.id = b.id
WHERE b.id IS NULL

Im Grunde wird also die Tabelle "vergeben" mit einem "LEFT JOIN" an die Seriennummertabelle angehangen. Ist in der Tabelle "vergeben" die id existent wird dieser Datensatz nicht ausgeben.

Möglichkeit 2 HAVING (ab MySQL 4.x glaub):
PHP:
SELECT a.id
FROM seriennummern AS a
HAVING (
	SELECT COUNT( * )
	FROM vergeben AS b
	WHERE b.id = a.id
)=0

Du wirst die Abfrage sicher selber auf deine Bedürfnisse anpassen können ;).

Solltest du wirklich beide Tabellen abfragen wollen, bekommst du das mit einem UNION verdunden mit 1. oder 2. hin.

Viele Grüße Bloddy
 
Zuletzt bearbeitet:
Wie können a und b gleichzeitig Tabellenname und Bezeichnung sein. Klingt irgendwie unlogisch.

Habs mit Anleihe deiner Syntaxvorschläge und ein bissle eigener Überlegungen hinbekommen.

Danke für die Hinweise. MySQL bietet schon extrem viele Möglichkeiten :D
 
Hallo nochmals,

schön das ich helfen konnte. Ich benutze lieber kurze Aliase als die langen Tabellennamen, weil es
a) weniger Schreibarbeit ist und
b) irgendwie ordentlicher aussieht.

Natürlich ist das wie überall Geschmackssache - die einen machen es so die anderen machen es anders :).

Schönes Wochenende noch
Robert
 
Zurück