2012-08-06 64 views
8

嗨誰能幫我一下SQLSQL多條件

我在我的表這樣的數據:

 

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 


我怎樣才能得到DATE_ADDED結果與「馬尼拉」的位置, '日本','宿務'和狀態= 1

這三個數據必須存在才能得到日期。

結果應該是:基於該表

 
date_added 
2012-08-01 
2012-08-06 

因爲在2012-08-04'日本沒有存在。

我當前樣本SQL:

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

請幫助.....任何幫助將不勝感激

回答

10

試試這個:

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

試試這個

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

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

這個查詢將給2012-08-04還 – 2012-08-06 11:00:56

+1

第一個查詢應使用周圍的區位條件 – mishu 2012-08-06 11:02:22

+1

不好的做法混合「AND」和「OR」一些括號。你也應該把OR括起來。這意味着(馬尼拉或日本或宿務)和狀態= 1 - 或 - 馬尼拉或日本或(宿霧和狀態= 1) – Waygood 2012-08-06 11:04:12

2

您需要在SQL IN操作:

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

或者,您需要使用OR運營商和支架的位置聲明:

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

這兩種表述中的任何一種都會在2012-08-04中得出結果。我不認爲這是OP想要的 - 他只想要馬尼拉,宿務和日本出現的日期。 – phillyd 2012-08-06 11:10:09

0
WHERE location IN ('Manila' , 'Japan', 'Cebu') AND status = 1 
0
當您使用

AND條件在同一個字段上,它總是會導致false,因爲a字段只能有1 possible value。所以,你needto使用IN

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