的SQLite查询可能不处于状态

的SQLite查询可能不处于状态,sqlite,Sqlite,我有一张有以下信息的桌子 AreaDescription AD ------------------ Processing1 BB Geology BC pilot BB 需要一种动态的方法来查找给定集合('BC','G','s')的AD中是否没有匹配项。它返回所有记录,否则只返回与给定集合('BC','G','s')匹配的记录 我正在尝试上面的SQL,其中包含 (在('BC','G','S')或1=1中的AD) 表示如果AD在('B

我有一张有以下信息的桌子

AreaDescription     AD
------------------
Processing1         BB
Geology         BC
pilot           BB
需要一种动态的方法来查找给定集合('BC','G','s')的AD中是否没有匹配项。它返回所有记录,否则只返回与给定集合('BC','G','s')匹配的记录

我正在尝试上面的SQL,其中包含

(在('BC','G','S')或1=1中的AD)

表示如果AD在('BC','G','S')中有值,则返回这些值,否则按照1=1条件返回所有值

但这并不像我想的那样有效

这里我得到的所有行不仅包含“BC”,所以我猜OR条件不是正确的方式


我有办法做到这一点吗?使用SWITCH?

只需组合两个查询,并在第二个查询中使用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'))

SqlLite没有任何过程语言。所以简单地说,你不能用简单的程序来做。您必须合并或合并两个评估。但是你可以简单地在你的代码中编程实现。
1=1
总是正确的,如果你使用
将其与另一个条件结合起来,那么当然,显然其他条件的结果根本不重要。
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'))