Join Problem: Einträge in einer Tabelle vorhanden sind, aber nicht in einer anderen

Join Problem: Einträge in einer Tabelle vorhanden sind, aber nicht in einer anderen

am 28.02.2006 16:55:46 von Sebastian Wittek

Hallo ich habe folgendes Problem (MySQL-Version: 4.0.25-standard)

Ich möchte eine Art Einkaufsliste erstellen.
Dabei gibt es verschiedene Benutzer die für verschiedene Abteilungen Artikel
von einer Liste auf einen Bestellzettel ziehen können.

Ein Artikel, der bereits auf der Bestelliste dieser Abteilung liegt, darf in
der Auswahl nicht mehr angezeigt werden.

Tabelle Bestellungen:
+---+---------+------+---------+--------+----+
|ID |ArtikelID|Anzahl|BereichID|PersonID|....|
+---+---------+------+---------+--------+----+
| 1| 1| 5| 1| 1|....|
+---+---------+------+---------+--------+----+
| 2| 2| 10| 1| 1|....|
+---+---------+------+---------+--------+----+
| 3| 10| 200| 1| 1|....|
+---+---------+------+---------+--------+----+


Tabelle Artikel:
+----------+-----------+----+
|ArtikelID |Bezeichnung|....|
+----------+-----------+----+
| 1| Artikel A|....|
+----------+-----------+----+
| 2| Artikel B|....|
+----------+-----------+----+
|..........|...........|....|
+----------+-----------+----+
| 10| Artikel X|....|
+----------+-----------+----+
| 11| Artikel Y|....|
+----------+-----------+----+


Angenommen der Benutzer stellt jetzt die Einkaufsliste für Bereich 1
zusammen. Dann möchte ich als Ergebnis von SELECT nur ArtikelID 11 bekommen,
bzw. alle Artikel die in Tabelle Artikel drin sind, aber noch nicht in
Tabelle Bestellungen mit BereichID 1.

Wenn ein Benutzer die Liste für Bereich 2 zusammenstellt, müssten alle
Artikel kommen, da ja noch keine Bestellung für BereichID 2 existiert.

Mein ursprüngliches SELECT ohne Beachtung der BereichID war:

select a.ArtikelID, a.Bezeichnung from Artikel
a LEFT join Bestellungen b ON a.ArtikelID = b.ArtikelID
WHERE b.ArtikelID is NULL

Jetzt war mein Gedanke, dass man das Ganze auf einen Bereich beschränken
kann:

select a.ArtikelID, a.Bezeichnung from Artikel
a LEFT join Bestellungen b ON a.ArtikelID = b.ArtikelID
WHERE b.ArtikelID is NULL AND b.BereichID = 1

Das geht aber natürlich nicht, weil als BereichID ja nur "NULL" rauskommt.

Was muss ich denn ändern, um zum gewünschten Ergebnis zu kommen?



Vielen Dank fürs Durchlesen und Mitdenken ;-)

Sebastian

Re: Join Problem: Einträge in einer Tabelle vorhanden sind, aber nicht in einer anderen

am 28.02.2006 18:16:53 von Hartmut Holzgraefe

Sebastian Wittek wrote:
> Jetzt war mein Gedanke, dass man das Ganze auf einen Bereich beschrän=
ken=20
> kann:
>=20
> select a.ArtikelID, a.Bezeichnung from Artikel
> a LEFT join Bestellungen b ON a.ArtikelID =3D b.ArtikelID
> WHERE b.ArtikelID is NULL AND b.BereichID =3D 1
>=20
> Das geht aber natürlich nicht, weil als BereichID ja nur "NULL" rausk=
ommt.
>=20
> Was muss ich denn ändern, um zum gewünschten Ergebnis zu kommen?

verschiebe die Bereich-ID in die JOIN-Bedingung

SELECT a.ArtikelID, a.Bezeichnung
FROM Artikel a
LEFT JOIN Bestellungen b
ON a.ArtikelID =3D b.ArtikelID
AND b.BereichID =3D 1
WHERE b.ArtikelID is NULL

--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com

http://www.mysql.com/support/

Re: Join Problem: Einträge in einer Tabelle vorhanden sind, aber nicht in einer anderen

am 01.03.2006 10:16:05 von Sebastian Wittek

"Hartmut Holzgraefe" schrieb

> verschiebe die Bereich-ID in die JOIN-Bedingung

WOW, manchmal denkt man viel zu kompliziert...

Vielen Dank.

Sebastian