SQL Problem ...
Dirk
- datenbank
0 Matrix0 seth0 Tobias Kloth0 Rouven0 Tobias Kloth0 Rouven0 Dirk0 Tobias Kloth
Hallo zusammen,
habe ein kleines SQL-Problem (MySQL 3.23.56), zu dem ich überhaupt keinen sinnvollen Lösungsansatz finde: Ich will aus der unteren Tabelle alle Produkte filtern, die in rot und grün verfügbar sind.
Produkt | Farbe
---------------
1 | rot
1 | gelb
1 | grün
2 | rot
3 | blau
...
Mit AND bzw. OR Verknüpfungen komme ich da ja nicht besonders weit ... Hat da irgendjemand eine Idee?
Dank schon mal :-)
Dirk
Hallo
Mit AND bzw. OR Verknüpfungen komme ich da ja nicht besonders weit ...
Wiso?
where Farbe='grün' OR Farbe='rot'
ergibt alle Produkte, die Grün und rot sind ...
Nicht?
Gruß Matrix
Hi,
ergibt alle Produkte, die Grün und rot sind ...
Nicht?
Nein, gibt die Menge der Produkte, die es in grün gibt + die Mege der Produkte, die es in rot gibt.
Aber man kann sich ja mal verlesen.
Zu Deiner Frage nochmal:
Ich denke, das geht so:
Antwort morgen... Ich muss weg :-)))
Ciao.
Aber das mit dem Distinct von seth kann ich mir nicht vorstellen, weil Du ja garkeine 2 Tables hast, oder?
hi Matrix!
Aber das mit dem Distinct von seth kann ich mir nicht vorstellen, weil Du ja garkeine 2 Tables hast, oder?
http://www.mysql.de/doc/de/Multiple_tables.html (unten, letztes beispiel)
die beiden tabellen, bei denen man einen join durchfuehrt, muessen nicht verschieden sein. eine tabelle kann auch einfach mit sich selbst verknuepft werden.
prost
seth
hi Dirk!
wenn du alle produkte extrahieren willst, fuer die gilt, dass sie in beiden farben (rot und gruen) existieren, dann kannst du das z.b. erreichen mit
select distinct t1.produkt
from tabelle t1, tabelle t2
where t1.produkt=t2.produkt
and t1.farbe="rot"
and t2.farbe="gruen";
prost
seth
Hallo Dirk,
habe ein kleines SQL-Problem (MySQL 3.23.56), zu dem ich überhaupt keinen sinnvollen Lösungsansatz finde: Ich will aus der unteren Tabelle alle Produkte filtern, die in rot und grün verfügbar sind.
SELECT DISTINCT Produkt,Farbe FORM tabelle WHERE Farbe='rot' OR Farbe='grün'
sollte helfen (was es mit DISTINCT auf sich hat, steht in http://www.mysql.de/doc/de/Selecting_columns.html).
Grüße aus Nürnberg
Tobias
Hallo,
SELECT DISTINCT Produkt,Farbe FORM tabelle WHERE Farbe='rot' OR Farbe='grün'
Diese Abfrage bringt dir jetzt vermutlich immer noch das Ergebnis
1 | rot
1 | grün
2 | rot
oder so.
Wenn du stattdessen nur die 1 und die 2 haben willst, dann musst du aus dem DISTINCT noch das ", Farbe" rausnehmen (falls die Datenbank das mitmacht trotz WHERE-Klausel):
SELECT DISTINCT Produkt FROM tabelle WHERE Farbe='rot' OR Farbe = 'grün'
oder auch
SELECT DISTINCT Produkt FROM tabelle WHERE Farbe IN ('rot', 'grün')
MfG
Rouven
Hallo Rouven,
SELECT DISTINCT Produkt,Farbe FORM tabelle WHERE Farbe='rot' OR Farbe='grün'
Diese Abfrage bringt dir jetzt vermutlich immer noch das Ergebnis
1 | rot
1 | grün
2 | rot
oder so.
stimmt, du hast recht - allerdings habe ich in dem Query noch einen Verdreher eingebaut: es muss natürlich FROM statt FORM heißen :-)
SELECT DISTINCT Produkt FROM tabelle WHERE Farbe='rot' OR Farbe = 'grün'
SELECT DISTINCT Produkt FROM tabelle WHERE Farbe IN ('rot', 'grün')
die funktionieren beide (habs getestet :-))
Grüße aus Nürnberg
Tobias
Hi Tobias,
ein Problem - zu dem sich unser Fragesteller leider nicht mehr geäußert hat - ist aber immer noch da:
Wenn er alle Produkte haben will die in rot UND grün verfügbar sind, dann ist natürlich sicher zu stellen, dass auch wirklich beide Farben da sind, d.h. vielleicht sollte man am Ende doch noch mit sich selbst joinen um das sicherzustellen:
SELECT DISTINCT produkt
FROM
tabelle1 as a
INNER JOIN
tabelle1 as b
ON a.produkt=b.produkt
WHERE a.farbe = 'grün'
AND b.farbe = 'rot'
Ich möchte jetzt gerade nicht drüber nachdenken, ob das DISTINCT dann noch einen Sinn macht...
MfG
Rouven
Hi Rouven,
erst mal vielen Dank!
Wenn er alle Produkte haben will die in rot UND grün verfügbar sind, dann ist natürlich sicher zu stellen, dass auch wirklich beide Farben da sind, d.h. vielleicht sollte man am Ende doch noch mit sich selbst joinen um das sicherzustellen:
Die Idee mit dem inner join ist super, so funktioniert es sicherlich auch. Die Angabe von DISTINCT bringt vermutlich nur dann etwas, wenn ein Produkt mehrmals mit der selben Farbe vorkäme, was aber keinen Sinn ergibt.
Grüße, Dirk
Hallo Rouven,
Wenn er alle Produkte haben will die in rot UND grün verfügbar sind, dann ist natürlich sicher zu stellen, dass auch wirklich beide Farben da sind,
stimmt, das schrieb er ja im Ausgangsposting...
SELECT DISTINCT produkt
die Zeile muss
SELECT (a|b).produkt
lauten - mit DISTINCT bekommst du garkein Ergebnis, und ohne (a|b). einen ambiguous-Fehler - ansonsten Funktioniert der Query.
Grüße aus Nürnberg
Tobias