我有三个表(正向,反向和探测),它们都包含相同的列(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)
感谢您的帮助。
答案 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