我有一個對象Product
有很多Tag
s。我想編寫一個查詢,如果列表Tag
ID僅在輸入列表中包含所有產品標籤時才返回Product
。輸入列表可能包含不屬於產品組成部分的標籤ID,但沒關係,產品仍然可以退回(即,產品的所有標籤必須作爲輸入列表的子集存在,以包含在結果中)。如何只包含結果,如果輸入列表中存在所有相關的值
我能寫出1個查詢來完成這個任務,但我真的很希望能夠在沒有JOIN中的子查詢的情況下執行此操作。這是我的本錢:
SELECT *
FROM product
LEFT JOIN product_tag ON product_tag.product_id = product.id
LEFT JOIN (
SELECT product.id, COUNT(*) AS record_count
FROM product
LEFT JOIN product_tag ON product_tag.product_id = product.id
GROUP BY product.id
) AS inner_q ON inner_q.id = product.id
WHERE product_tag.id in (1, 2, 3) -- Sample Tag ids
GROUP BY product.id
HAVING COUNT(*) = inner_q.record_count
差不多,但> = 3(大概是輸入列表中的數)使得它無法正常工作。如果一個產品只有2個標籤(比如id 1和2),它應該是不包括的 – Thelonias
你的回答肯定讓我走上了正軌,我只需要調整它,這樣HAVING約束就是特定的計數產品所有的標籤 – Thelonias