在sql查询的where子句中使用case时,它不起作用。
问题:
我有两个名为TblEmployee和TblAssociate的表。两个表包含常用列PeriodId,EmpId和AssociateId。我的要求是从中获取值 应排除TblEmployee与来自TblAssociate的EmpId和AssociateId的组合。排除应基于PeriodId条件。
If(@PeriodID<50)
BEGIN
SELECT *
FROM TblEmployee
WHERE (EmpId+AssociateId) NOT IN (SELECT EmpId+AssociateId FROM TblAssociate)
END
ELSE
BEGIN
SELECT *
FROM TblEmployee
WHERE (EmpId) NOT IN (SELECT EmpId FROM TblAssociate)
END
上面的代码正在运行,但我需要避免IF-ELSE条件,并且我希望在&#39;情况下使用&#39;在where子句中。请帮助
答案 0 :(得分:2)
试试这个:
infile = [
"lots of words", # lots at index 0, words at index 2
"many many work words", # many at index 0, many at index 1, work at index 2, words at index 3
"how come this picture lots work", # lots at index 4, work at index 5
"poem poem more words that rhyme" # words at index 3
]
你说你的代码工作正常,但这很奇怪,因为将id值加在一起并没有多大意义。无论如何,上述语句产生的结果等同于最初发布的代码。
答案 1 :(得分:0)
您可以在AND-OR
子句中使用WHERE
组合。此外,您不应该使用+
,因为它可能会导致错误的结果。您可以将查询重写为:
SELECT e.*
FROM TblEmployee e
WHERE
(
@PeriodID < 50
AND NOT EXISTS(
SELECT 1
FROM TblAssociate a
WHERE
a.EmpId = e.EmpId
AND a.AssociateId = e.AssociateId
)
)
OR
(
@PeriodID >= 50
AND NOT EXISTS(
SELECT 1
FROM TblAssociate a
WHERE a.EmpId = e.EmpId
)
)
答案 2 :(得分:0)
添加ID并不能保证唯一性。例如,如果EmpId
为5且AssociateId
为6,那么EmpId
+ AssociateId
= 11,而EmpId
+ AssociateId
= 11甚至如果EmpId
为6且AssociateId
为5.在下面的查询中,我确保子查询将在找到第一条记录时停止搜索并返回单个记录,其值为{{ 1}}。当且仅当1
在结果中时,我们才选择员工。在子查询中,我们首先检查操作数,然后检查我们是否处于必须检查1
或者匹配的时间段内。
AssociateId