表格中的每一个都在SELECT
n 行中ArticleID
TagMap
SELECT a.ArticleID,a.TagID FROM TagMap a
LEFT JOIN TagMap b ON a.ArticleID = b.ArticleID AND a.TagID < b.TagID
GROUP BY a.ArticleID,a.TagID
HAVING COUNT(b.TagID) < 3
ORDER BY a.ArticleID,a.TagID
我想添加一个条件来限制查询到特定的标签,
SELECT a.ArticleID,a.TagID FROM TagMap a
LEFT JOIN TagMap b ON a.ArticleID = b.ArticleID AND a.TagID < b.TagID
WHERE a.TagID IN(SELECT TagID FROM Tags WHERE Status=1)
AND b.TagID IN(SELECT TagID FROM Tags WHERE Status=1)
GROUP BY a.ArticleID,a.TagID
HAVING COUNT(b.TagID) < 3
ORDER BY a.ArticleID,a.TagID
如果我使用条件作为子查询,我需要子查询。如果我使用条件 as JOIN
,我需要两个JOIN
s ,因为上面JOIN
是LEFT JOIN
。
有更简单的方法吗?
您可以将状态条件添加到 th on 子句
如果一个状态是独立的,如果 a 或 b 你占据该行,则根本不需要子选择,如果不是你解雇它。
如果将状态条件放在 WHERE 子句或 ON 中,则不会更改执行计划。
但是您可以更改索引以包含状态