2016-11-25 79 views
-3

我要挑從使用and子句查詢相同的列值相同的列,這看起來是這樣的:選擇具有多個WHERE條件對從SQL Server

select * 
from degree_detail_result 
where course_id=1 and course_id=2 and course_id=3 

有什麼不對上述查詢?

+3

給出示例數據和預期結果。這些條件對任何行都是互斥的。 –

+3

請*說出*你的情況。我最好的猜測是你需要'OR'而不是'AND'。 –

+1

想一想:同一列如何同時包含值1 2和3 ** **? –

回答

1

使用in

select * from degree_detail_result where course_id in (1,2,3) 

注意and,因爲它需要在它兩側的條件,同時,這顯然是不可能爲真將無法正常工作。

如果你想要得到的結果下一個相互的,而不是單獨的行,你可以使用pivot

select * from degree_detail_result 
pivot (min(degree_id) for course_id in ([1], [2], [3])) as degree 

如果你想獲得一個 ID(不提到你問題),對其中有用於COURSE_ID 1,2和3的記錄,你可以這樣做:

select degree_id from degree_detail_result 
where course_id in (1,2,3) 
group by degree_id 
having count(distinct course_id) = 3 
+0

ok supose我想知道什麼是學位編號,當然是1和2和3。告訴我我要做什麼?上面的方法也嘗試過使用同一個comon id的程度id。 – ghasif

+1

只需選擇它?你寫的東西可以用很多方式解釋。請編輯您的問題,提供樣本數據以及您期望從該數據中獲得的輸出。 – trincot

+0

可能是基於該評論的http://stackoverflow.com/q/12563952/73226的副本。 –

1
select * 
from degree_detail_result 
where course_id=1 and course_id=2 and course_id=3 

此查詢不起作用,因爲此條件不能同時滿足。

您可以嘗試使用INTERSECT,但你需要指定你正在尋找的,而不是SELECT *

特定列即下面將不返回行

SELECT * 
FROM degree_detail_result 
WHERE course_id = 1 
INTERSECT 
SELECT * 
FROM degree_detail_result 
WHERE course_id = 2 
INTERSECT 
SELECT * 
FROM degree_detail_result 
WHERE course_id = 3; 

,你將需要

SELECT degree_id 
FROM degree_detail_result 
WHERE course_id = 1 
INTERSECT 
SELECT degree_id 
FROM degree_detail_result 
WHERE course_id = 2 
INTERSECT 
SELECT degree_id 
FROM degree_detail_result 
WHERE course_id = 3; 
+0

這是多餘的。什麼不使用IN或只是布爾OR對比表3次? – scsimon

+0

感謝您的回覆 – ghasif