在SQL Server的同一列上使用多个WHERE条件进行SELECTING

时间:2016-11-25 21:40:52

标签: sql sql-server

我想使用and子句查询从同一列中选择值,如下所示:

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

上述查询有什么问题?

2 个答案:

答案 0 :(得分:3)

使用in

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

请注意and不起作用,因为它要求两边的条件同时为真,这显然是不可能的。

如果您希望将结果 next 发送给彼此而不是分开的行,则可以使用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

答案 1 :(得分: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;