以下是我的查询,我对sql相当新,所以我的理解不是最好的。我希望我的查询结果只给出我在'where'语句中指定的名称。在我的查询下面有4个活动名称,1个团队名称和1个日期范围(3个不同的列,4个活动在“名称”列中找到)。它必须符合所有这些条件。
我的查询一直工作到我在'where'语句中指定的第二个名称。
查询:
SELECT *
FROM databse1.dbo.table1
where team_name = 'CTM Tier 2'
and date >= '2018-02-01' and date <= '2018-02-28'
and name = 'Post Vet 460'
and name = 'Post Vet CA Complex'
and name = 'Post Vet CA Standard'
and name = 'Post Vet CAA'
查询运行良好,直到(并且名称='Post Vet 460'),但如果我作为一个整体运行查询,它会给我空白结果。在这种情况下我是否应该使用一个案例,所有的建议和提示都非常感谢!
答案 0 :(得分:3)
它不能同时出现,所以请使用in运算符
and name in ('Post Vet 460', 'Post Vet CA Complex', 'Post Vet CA Standard', 'Post Vet CAA')
答案 1 :(得分:1)
我想你想要IN
:
select t1.*
from databse1.dbo.table1 t1
where team_name = 'CTM Tier 2' and
date >= '2018-02-01' and date <= '2018-02-28' and
name in ('Post Vet 460', 'Post Vet CA Complex', 'Post Vet CA Standard', 'Post Vet CAA');
您的查询不返回任何内容,因为name
在相同的行上不能包含不同的值。
您可能还需要like
,具体取决于您的数据:
select t1.*
from databse1.dbo.table1 t1
where team_name = 'CTM Tier 2' and
date >= '2018-02-01' and date <= '2018-02-28' and
name like 'Post Vet %'
答案 2 :(得分:0)
现在尝试这个查询! 你需要找到任何一个具有这些名称之一的行。所以需要使用OR条件。
SELECT *
FROM databse1.dbo.table1
where team_name = 'CTM Tier 2'
and date >= '2018-02-01' and date <= '2018-02-28'
and
( name = 'Post Vet 460'
or name = 'Post Vet CA Complex'
or name = 'Post Vet CA Standard'
or name = 'Post Vet CAA'
)
答案 3 :(得分:0)
您遇到的问题是因为您使用的是AND
运营商。
您应该使用OR
运算符。
这是正确的实施方式:
WHERE team_name = 'CTM Tier 2'
AND date >= '2018-02-01' AND date <= '2018-02-28'
AND name = 'Post Vet 460'
OR name = 'Post Vet CA Complex'
OR name = 'Post Vet CA Standard'
OR name = 'Post Vet CAA'
正如其他人所指出的,您也可以使用IN
。
WHERE team_name = 'CTM Tier 2'
AND date >= '2018-02-01' AND date <= '2018-02-28'
AND name IN ('Post Vet 460', 'Post Vet CA Complex', 'Post Vet CA Standard', 'Post Vet CAA')
如果您想详细了解IN
以及与OR
,have a look here的差异。