2016-07-23 9 views
2

Schau auf meinen Tisch, ich versuche, die Früchte aus den USA mit ups Versand und auch alle Früchte, die USA nicht enthalten. Schau auf meinen Tisch, Apfel gehören USA und ups, Beere nicht USA. Ich möchte also Äpfel und Beeren bekommen. Die folgende Abfrage ist die beste, die ich bekommen habe, aber es scheitert, es gibt kein Echo auf Beere, die keine usa enthält.Versuchen, bestimmte Werte mit mysql PHP zu bekommen?

SELECT fruit FROM table fruit WHERE shipping = 'ups' AND country ='USA' GROUP BY fruit 


table fruit   
fruit country shipping 
apple USA  ups 
apple China  ups 
apple UK  ups 
banana USA  fedez 
banana Russia fedez 
banana Italy  fedez 
berry Italy  fedez 
berry China  fedez 
berry French fedez 

Antwort

2
SELECT fruit FROM fruit WHERE (country = "USA" AND shipping = "ups") OR fruit NOT IN (SELECT fruit FROM fruit WHERE country = "USA") GROUP BY fruit 

SELECT fruit 
FROM fruit 
WHERE 
    (country = "USA" AND shipping = "ups") 
    OR 
    fruit NOT IN (
     SELECT fruit FROM fruit WHERE country = "USA" 
    ) 
GROUP BY fruit 

schreiben, wenn ich mich nicht irre, wird die erste Anweisung Sie apple zurück. Die zweite hat eine verschachtelte Abfrage, die apple und banana zurückgibt, weil beide Land USA haben, und die Anweisung wird die Frucht finden, die nicht in dieser Gruppe ist, so ist es berry. Also am Ende wird es nur apple und berry

zurückgeben Wenn es alles Echo ich werde es auf meinem Computer versuchen.

+0

Dies funktioniert, aber es gibt '[Apfel, Beere, Beere, Beere]' zurück und ich nehme an, das OP will nur '[Apfel, Beere]'. Sie können die GROUP BY an das Ende der SELECT-Taste verschieben. – akinuri

+0

@akinuri aah ja ich habe das nicht kommen sehen. Die Antwort jetzt bearbeiten. – atayenel

+0

Haben Sie auch etwas dagegen, wenn ich die Abfrage so bearbeite, dass sie besser lesbar ist?Ich denke, es verdient ein Highlight :) – akinuri

0

versuchen dieses

SELECT fruit FROM fruit WHERE (shipping = 'ups' AND country = 'USA') OR country NOT IN('USA');

+0

Danke für die Antwort. Es hallt alles wider. Ich benutze GROUP BY, aber es gibt immer noch alles wieder. Ich denke der Grund ist, dass der Tisch drei Bananenreihen enthält. Wenn Sie sagen, Land nicht in ("USA"), die anderen beiden Reihen hat keine USA, aber immer noch Banane, deshalb Echo jeder Frucht. Wie löst man das? – conan

+0

Möchten Sie, dass die Zeilen mit 'Banane' nicht angezeigt werden? –

+0

@FahadKazmi Banane umfasst USA. Also sollte es nicht angezeigt werden. – atayenel

0

versuchen Sie dieses

SELECT Obst aus Obst, wo oder Land (= 'ups' AND Land = 'USA' Versand)! = "USA" GROUP BY Obst;

+0

Es Echo jeder Frucht. – conan

0

können Sie diese So

SELECT fruit FROM fruit WHERE (shipping = 'ups' AND country = 'USA') OR fruit NOT IN (SELECT fruit FROM fruit WHERE country = 'USA' GROUP BY fruit); 
+0

Danke für die Antwort. Es hallt alles wider. Ich benutze GROUP BY, aber es gibt immer noch alles wieder. Ich denke der Grund ist, dass der Tisch drei Bananenreihen enthält. Wenn Sie sagen, Land nicht in ("USA"), die anderen beiden Reihen hat keine USA, aber immer noch Banane, deshalb Echo jeder Frucht. Wie löst man das? – conan

+0

Sehen Sie Ihre Datenbank. Wenn Banane nicht in den USA ist, ist es in den USA nicht. Damit es alles zeigt. Was möchten Sie tun?? –

+0

Bitte sehen Sie meine aktualisierte Antwort –

0
SELECT DISTINCT f.fruit 
FROM TableFruit AS f 
LEFT OUTER JOIN TableFruit AS usa ON f.fruit=usa.fruit and usa.country='USA' 
WHERE f.shipping = 'ups' AND f.country ='USA' 
    OR usa.country IS NULL 

Erläuterung: Ein OUTER JOIN kehrt nulls für alle Spalten in der verknüpften Tabelle, wenn keine Zeile ist, die die Bedingung erfüllt, beizutreten. In diesem Fall sucht es nach einer Reihe b, die die gleiche Frucht wie f und das Land der USA hat. Wenn also keine Zeile mit dem Land USA vorhanden ist, wird Land null sein.

Verwandte Themen