I SELECT
n rows for each ArticleID
from TagMap
table
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
I want to add a condition to limit the query to specific tags,
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
If I use the condition as sub-query, I would need to sub-queries. If I use the condition as JOIN
, I need two JOIN
s since the above JOIN
is LEFT JOIN
.
Is there an easier way to do so?
WHERE
clause has the same condition written twice (WHERE a.TagID IN(SELECT TagID FROM Tags WHERE Status=1)
) which doesn't do anything differently logically.a.TagID
isb.TagID
.