下面是该示例的简化表:在VS中NOT EXISTS子句,查询优化
这是我的查询:
SELECT * FROM A条
在哪里A.id IN(
SELECT AT.article_id从文章A1,article_tag AT
WHERE(A1.id = AT.article_id)
AND(AT.tag_id IN (2,1))
GROUP BY AT.article_id
HAVING计数(AT。 article_id)=
);
技术上该查询似乎工作,返回"all the articles having at least keywords 2 and 1"
。
大胆的部分是为了改变。举例来说,如果我的关键字列表是[1,3,4],
(2, 1)
将变更为(1,3,4)和2
将变更为(列表的长度)。
虽然这个查询不会工作,我微微记得使用朋友NOT EXISTS条款。它适用吗?如果是,哪个查询在性能方面是最佳优化?
在子查询中统计不同! – jarlh 2015-03-03 08:09:04
EXISTS或多或少与IN相同,至少在(大多数)dbms优化之后。 (NOT EXISTS是NOT IN的一个“无效安全”替代方法。) – jarlh 2015-03-03 08:13:27
您也可以在子查询中的两个条件上应用联接,但是当您查看它时,这同样会变得清晰。 – 2015-03-03 08:15:38