我有一张包含以下信息的表格。
AreaDescription AD
------------------
Processing1 BB
Geology BC
pilot BB
需要动态的方法来查找给定集合中是否存在AD匹配('BC','G','S')它返回所有记录,否则只返回给定集合中匹配的记录(' BC”, 'G', 'S')
select * from tblArea where AreaDescription like '%o%' and (AD in ('BC','G','S') or 1=1)
我正在尝试上面的SQL,它包含
(AD in('BC','G','S')或1 = 1)
表达AD是否具有('BC','G','S')中的值然后返回那些或者按照1 = 1条件返回所有内容。
但这不起作用,因为我认为它有效。
这里我得到的所有行不仅仅包含'BC',所以我猜OR条件不正确吗?
有没有办法可以做到这一点?使用SWITCH?
答案 0 :(得分:1)
只需组合两个查询,并在第二个查询中使用EXISTS来检查第一个是否与任何记录匹配:
SELECT *
FROM tblArea
WHERE AreaDescription LIKE '%o%'
AND AD IN ('BC', 'G', 'S')
UNION ALL
SELECT *
FROM tblArea
WHERE AreaDescription LIKE '%o%'
AND NOT EXISTS (SELECT 1
FROM tblArea
WHERE AreaDescription LIKE '%o%'
AND AD IN ('BC', 'G', 'S'))