2012-08-06 18 views
8

Hi Qualcuno mi può aiutare su SQLSQL condizione multipla sul singolo campo

Ho questo dati in mio tavolo:

 

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 


come posso ottenere il risultato DATE_ADDED con la posizione di 'Manila', "Giappone", "Cebu" e stato = 1

I tre dati devono esistere prima di poter ottenere la data.

risultato dovrebbe essere: Sulla base di questa tabella

 
date_added 
2012-08-01 
2012-08-06 

poiché il 2012-08-04 'Japan' non esiste.

mio campione attuale SQL:

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

Aiutateci ..... qualsiasi aiuto sarà molto apprezzato

risposta

10

provare questo:

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

Prova questa

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

o

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

questa domanda darà 2012-08-04 anche –

+1

la prima query dovrebbe utilizzare alcuni parentesi intorno alla posizione condizioni – mishu

+1

pratica miscelazione BAD di 'E' e 'O'. Dovresti anche aggiustare gli OR. Questo significa (Manila OR Japan O cebu) AND status = 1 - o-- Manila O Japan O (cebu e status = 1) – Waygood

2

è necessario l'operatore SQL IN:

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

Oppure, in alternativa, è necessario utilizzare l'operatore OR e la staffa le dichiarazioni di localizzazione:

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

Ciascuna di queste affermazioni darà 2012-08-04 nell'output. Non penso che questo sia ciò che vuole l'OP - vuole solo le date in cui appaiono Manila, Cebu e il Giappone. – phillyd

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

quando si utilizza AND condizione sullo stesso campo, sarà sempre risultato falso perché un il campo può avere solo 1 possible value. Così si needto utilizzare IN per quella

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