I SELECT
n linhas para cada uma ArticleID
da TagMap
tabela
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
Quero adicionar uma condição para limitar a consulta a tags específicas,
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
Se eu usar a condição como subconsulta, precisaria fazer subconsultas. Se eu usar a condição as JOIN
, preciso de dois JOIN
s já que o acima JOIN
é LEFT JOIN
.
Existe uma maneira mais fácil de fazer isso?
Você pode adicionar as condições de status à cláusula th on
as subseleções não são necessárias de forma alguma se um status for independente se a ou b você pegar a linha, se não for, você a descartará.
Se você colocar a condição de status em uma cláusula WHERE ou em ON não altera o plano de execução.
Mas você pode alterar o índice para incluir o Status