SQlite3查询:查找不属于值列表的行。优化

时间:2013-02-01 19:58:23

标签: sqlite

我刚刚读了一个问题,这是我正在寻找的: SO original question

  

让我们考虑我有一个表'Tab',它有一个'Col'列

     

表'Tab'有这个数据 -

Col
1
2
3
4
5
     

如果我有一组值(2,3,6,7)。我可以查询那些值   通过起诉查询显示在表和列表中

Select Col from Tab where col IN (2,3,6,7)
     

但是,如果我想返回列表中不存在的值   在表中,即在这种情况下仅为(6,7)。我应该使用什么查询?

我找到了几个涉及创建临时表的解决方案,但是那里找到的最好的一个(至少是更短的,我认为也更快)是SQL Server,并且在我看来不适用于我需要SQLite3。

  

SQL Server 2008方法

SELECT N FROM (VALUES(2),(3),(6),(7)) AS D (N)
EXCEPT
Select Col from Tab

SQLite 3有什么替代方法吗?

1 个答案:

答案 0 :(得分:1)

在SQLite中,您可以使用SELECT而不使用FROM子句来返回一条固定记录。 要获取多条记录,请将这些记录合并为UNION ALL(比UNION略快,因为它不检查重复项):

SELECT 2 AS Col UNION ALL
SELECT 3        UNION ALL
SELECT 6        UNION ALL
SELECT 7                 
EXCEPT
SELECT Col FROM Tab