2012-08-06 6 views
8

Hallo jemand mir über SQLSQL Multiple Zustand auf Einfeld

helfen kann ich diese Daten in meiner Tabelle:

 

date_added | location  | status 
2012-08-01 Manila   1 
2012-08-01 Japan   1 
2012-08-01 Cebu    1 

2012-08-04 Manila   1 
2012-08-04 Cebu    1 
2012-08-04 Africa   1 

2012-08-06 Manila   1 
2012-08-06 Japan   1 
2012-08-06 Cebu    1 


wie kann ich das DATE_ADDED Ergebnis mit der Lage in ‚Manila‘ erhalten, 'Japan', 'Cebu' und hat Status = 1

Die drei Daten müssen existieren, bevor ich das Datum bekommen kann.

Ergebnis sollte sein:

 
date_added 
2012-08-01 
2012-08-06 

seit über 2012-08-04 'Japan' auf dieser Tabelle basiert hat existiert nicht.

Meine aktuelle Sample SQL:

 
SELECT date_added FROM TABLE WHERE location ='Manila' AND location ='Japan' 
     AND location ='Cebu' AND STATUS =1; 

Bitte helfen ..... jede Hilfe wird sehr geschätzt

Antwort

10

dies versuchen:

SELECT DATE_ADDED 
FROM TABLE 
WHERE LOCATION IN ('MANILA' , 'JAPAN' , 'CEBU') 
AND STATUS =1 
GROUP BY DATE_ADDED 
HAVING (COUNT(DISTINCT LOCATION)=3) 
0

Versuchen Sie, diese

SELECT date_added FROM TABLE WHERE location ='Manila' or location ='Japan' or location ='Cebu' AND STATUS =1; 

oder

select date_added FROM TABLE WHERE location in ('Manila','Japan','Cebu') AND status='1' GROUPED BY date_added 
+0

diese Abfrage für diesen needto verwenden geben 2012-08-04 auch –

+1

die erste Abfrage einige Klammern um die Standortbedingungen – mishu

+1

BAD Praxis Mischen von ‚AND‘ verwenden sollte, und ‚OR‘. Sie sollten auch die ORs eingrenzen. Bedeutet dies (Manila ODER Japan ODER cebu) UND Status = 1 --oder-- Manila ODER Japan ODER (cebu und Status = 1) – Waygood

2

Sie müssen den SQL IN Operator:

SELECT date_added FROM TABLE WHERE location IN ('Manila', 'Japan', 'Cebu') AND STATUS =1; 

Oder alternativ, müssen Sie den OR Operator verwenden und die Ortsangaben klammern:

SELECT date_added FROM TABLE WHERE (location ='Manila' OR location ='Japan' OR location ='Cebu') AND STATUS =1; 
+0

Jede dieser Aussagen wird 2012-08-04 in der Ausgabe geben. Ich denke nicht, dass das das OP will - er will nur die Daten, auf denen Manila, Cebu und Japan erscheinen. – phillyd

0
WHERE location IN ('Manila' , 'Japan', 'Cebu') AND status = 1 
0

wenn Sie AND Bedingung auf dem gleichen Feld, wird es immer zu false führen, weil a Feld kann nur 1 possible value haben. So Sie IN

SELECT Date_added 
FROM myTable 
WHERE `Location` IN ('MANILA' , 'JAPAN' , 'CEBU') 
      AND `Status` =1 
GROUP BY Date_added 
HAVING COUNT(DISTINCT Location) = 3