Hallo zusammen,
ich stehe grad auf dem Schlauch.
Habe eine Tabelle in der Unternehmen stehen, die Produkte herstellen. Auf diese Tabelle möchte ich nun eine Abfrage setzen, die alle Unternehmen zurück liefert, die Schokolade (ProduktId 1) und Pudding (ProduktId 2) herstellen.
Die Tabelle enthält die unter anderem die Splaten Uid und ProduktId.
Es sollen aber im Ergebnis nur die Unternehmen angezeigt werden, die Schokolade UND Pudding produzieren.
Gibt es da eine Bedingung die direkt das richtige Ergebnis bringt oder muss ich mir da etwas wie eine Zwischenabfrage "basteln" die z.B. die Id's summiert und dann mit der Summe der Id's vergleicht, die ich als Filter übergeben habe?
Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt ???
Lieben Gruß
Halwin
Hallo,
es fehlt eine Tabelle ("tbl_UnternehmenProdukte") , die eine Zuordnung von Produkten zu einem Unternehmen herstellt.
Zitatdie Schokolade UND Pudding produzieren
ist mit lediglich einer Tabelle "tbl_Unternehmen" nicht abbildbar und somit nicht auszuwerten.
ich wusste ich habe vergessen was zu erklären :(
Ich habe natürlich eine Tabelle Unternhemen in der gibt es u.a. uid und Name der Firma, Dann habe ich eine Tabelle Produkte. Da stehen die ProduktId und der Name des Produktes drin. die Dritte Tabelle enthält die Zuordnung von Unternehmen zu Produkt. Angenommen ich habe 2 Unternehmen und 4 Produkte. In der Zuordnung steht
select distinct uid from zuordnung where uid =3 liefert demnach 2 Zeilen. Eine mit uid 1 und eine mit uid 2.
wie sieht aber das statement aus wenn ich alle uid's haben will die 1 UND 2 als ProdId haben. Also nur Ergebnis liefern wenn auch beide ProdId's zum gleichen Unternehmen in der Tabelle sind!
Mit
in(1,2) geht's nicht, weil das ja
entweder oder bedeutet.
Geht das immer noch einfach mit der Zwischetabelle? Und wenn ja, wie???
Hallo Halwin,
ZitatMit in(1,2) geht's nicht, weil das ja entweder oder bedeutet.
Genau, denn Schokolade kann kein Pudding sein (UND).
Versuch's mal mit ODER
... WHERE ProdID = 1 OR ProdID = 2Datenbanklogik ;D
gruss ekkehard
uhhh da muss ich dich korrigieren
select distinct uid from zuordnung where prodId = 1 or prodId = 2 liefert in meinem beispiel 2 Zeilen zurück
Unternehmen 1 hat Schokolade (1) UND Pudding (2)
Unternehmen 2 NUR Pudding(2)
Ich will aber nur die Unternehmen als Ergebnis, die Schoki UND Pudding haben. Das geht mit einer einfachen OR Bedingung nicht. Bin ich da auf dem Holzweg ;)
Datenbanklogik ;D
Gruß Olli
PS im statement im vorigen post von mir muss es natürlich ProdId und nicht Uid in der where Bedingung heißen... shame on me ;)
Hallo,
z. B.:
Select tbl_Unternehmen.U_Name
From (tbl_Zuordnung INNER JOIN tbl_Unternehmen ON tbl_Zuordnung.UP_UID = tbl_Unternehmen.UID) INNER JOIN tbl_Produkte ON tbl_Zuordnung.UP_ProdID = tbl_Produkte.Prodid
Where tbl_Zuordnung.UP_ProdID=1 Or tbl_Zuordnung.UP_ProdID=2
Group by tbl_Unternehmen.U_Name, tbl_Zuordnung.UP_ProdID
Having Count(*)=2
Hallo Halwin,
Sorry, zu flüchtig gelesen.
Franz Lösung sollte aber passen (nicht getestet).
gruss ekkehard
Hi,
der Vorschlag von Franz sieht sehr gut aus. Werd ich gleich mal ausprobieren.
Danke
feedback:
Die Abfrage funktioniert so leider nicht. Habe sie etwas umgestalltet und mich an einem Beispier orientier, das ich woanders gefunden hatte...
SELECT tblNV.*, tblSV.*,
-((tblNV.fld1=tblSV.fld1) + (tblNV.fld2=tblSV.fld2) + (tblNV.fld3=tblSV.fld3) + (tblNV.fld4=tblSV.fld4)) AS MatchCount
FROM tblNV, tblSV;
Jetzt muss man nur noch eine Where-Bedingung dran basteln die da heißt:
where MatchCount = (Anzahl Tabellen in From) -1 bzw. = 1 wenn es nur eine Tabelle ist
Hallo,
was genau funktioniert an meiner Version nicht?
Dein Beispiel kommt mir (jedenfalls) sehr suspekt vor... ;)
PS: sehe gerade darin noch die Angabe eines falschen Tabellenamens.. Habe mein Posting dahingehend korrigiert.