从表中选择在sqlite中的其他两个表中找不到的唯一行

时间:2014-03-25 18:11:37

标签: sqlite

我有三个表(正向,反向和探测),它们都包含相同的列(Query,QueryLength,Hit,Start,End,Strand,Description,Length,Percent_id,Score,Evalue)。 我想从'forward'获取唯一的行,其中'reverse'在'reverse'表或'probe'表中找不到。使用'AND'我没有得到任何结果,'OR'我只能用反向进行比较。

CREATE TABLE f AS SELECT * FROM forward WHERE forward.Hit NOT IN (SELECT Hit from reverse) OR (SELECT Hit FROM probe)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当您编写... OR (SELECT Hit FROM probe)时,您有一个标量子查询,即数据库只查看子查询返回的第一个值,如果该值不为零,则将其视为“true”。

要检查是否在另一个表中找到了值,您必须使用IN(在两种情况下):

SELECT * FROM forward
WHERE Hit NOT IN (SELECT Hit FROM reverse)
  AND Hit NOT IN (SELECT Hit FROM probe)

如果要检查整个记录而不是只检查一列,可以使用EXCEPT:

SELECT * FROM forward
EXCEPT
SELECT * FROM reverse
EXCEPT
SELECT * FROM probe