两种条件子句SQL

时间:2019-07-06 17:28:18

标签: sql sql-server conditional-statements where-clause

当满足2个条件时,我需要过滤一些行,但不排除其他行。

表格:

idRow   idMaster    idList
1         10        45
2         10        46
3         10        47
4         11        10
5         11        98
6         14        56
7         16        28
8         20        55

示例:

何时:

  • idMaster = 10和id List = 45(仅对idMaster 10显示此组合)
  • idMaster = 11和idList = 98(仅对idMaster 11显示此组合)
  • 还列出所有其他行。

预期结果:

idRow   idMaster    idList
1         10        45
5         11        98
6         14        56
7         16        28
8         20        55

运行SQL Server 2014

我尝试了CASE IF的组合,但所有情况仅过滤idMaster = 10,11和idList = 45,98,不包括其他行

2 个答案:

答案 0 :(得分:4)

尽管您没有提到数据库名称,但是以下查询逻辑将适用于所有数据库-

SELECT * 
FROM your_table
WHERE idMaster NOT IN (10,11)
OR (idMaster = 10 AND idList = 45)
OR (idMaster = 11 AND idList = 98)

答案 1 :(得分:1)

您确实可以使用(嵌套的)case来执行此操作。希望这可以帮助您更好地理解。

case idMaster
    when 10 then case idList when 45 then 1 end
    when 11 then case idList when 98 then 1 end
    else 1
end = 1

这可能是最好的:

not (idList = 10 and idList <> 45 or idList = 11 and idList <> 98)

总体而言,避免在多个位置重复该值列表通常是有益的。两者都避免了在更改到来时保持同步。