2016-11-25 78 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