我有这个有效的SQL语句:
select oriseqs.newID from oriseqs WHERE oriseqs.singlets=1 AND
oriseqs.newID not in (select newID from cleanreport WHERE trash!="")
我的问题是如何在这种特殊情况下避免在另一个内部做一个选择。我的意思是以没有嵌套选择的方式重写select语句。
如果需要,这是相关的架构:
CREATE TABLE cleanreport(newID TEXT, perc TEXT, inicoord INTEGER, endcoord INTEGER, ilen INTEGER, trash TEXT, comments TEXT);
CREATE TABLE oriseqs(newID TEXT, oldID TEXT, rawseq TEXT, singlets BOOLEAN);
答案 0 :(得分:3)
SELECT oriseqs.newID
FROM oriseqs AS o
LEFT JOIN cleanreport AS cr ON o.newID = cr.newID
WHERE oriseqs.singlets=1
AND trash != ""
AND cr.newID IS NULL
什么是PK?
答案 1 :(得分:1)
有几种方法可以解决SQL中几乎所有问题。在您的特定问题中,首先想到的另一个选择是使用左外连接并在第二个表的连接列中测试null。但是,您拥有的查询是完全合理的。我认为没有理由改变它并且怀疑 - 至少在第一次检查时 - 你会从另一种选择中看到更好的表现。
答案 2 :(得分:0)
select o.newID
from oriseqs o
left outer join cleanreport c on c.newID = o.newID
WHERE o.singlets=1
AND c.newID is null;