我有兩張桌子 - 一張是Product,另一張是Productimage。在產品影像表中,每個產品可以存在多個影像。每個影像設定 ISDEAULT 1 或 0。現在我想要產品表中所有影像的 ISDEAULT 為 0 的每個產品。
我寫了這個查詢
SELECT DISTINCT(pd.ProductId)
FROM Product pd
INNER JOIN ProductImage img ON img.ProductId = pd.ProductId
WHERE NOT EXISTS (
SELECT pdi.ProductId
FROM ProductImage pdi
WHERE pdi.IsDefault = 1
AND pdi.ProductId = pd.ProductId
)
它作業正常,但我的前輩告訴我使用另一種方法。
請給我優化的查詢
uj5u.com熱心網友回復:
您可以使用條件聚合來檢查 IsDefault = 1
這意味著您只查詢ProductImage一次表
SELECT pd.ProductId
FROM Product pd
JOIN ProductImage img ON img.ProductId = pd.ProductId
GROUP BY
pd.ProductId
HAVING COUNT(CASE WHEN img.IsDefault = 1 THEN 1 END) = 0;
如果你不在乎它是否有, ProductImage那么你可以做
SELECT pd.ProductId
FROM Product pd
WHERE NOT EXISTS (SELECT 1
FROM ProductImage img
WHERE img.ProductId = pd.ProductId
AND img.IsDefault = 1);
uj5u.com熱心網友回復:
SELECT IMG.PRODUCTID
FROM ProductImage AS img
GROUP BY IMG.PRODUCTID
HAVING MIN(ISDEAULT )=0 AND MAX(ISDEAULT)=0
你能試試這樣的嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359844.html
標籤:sql sql-server 查询语句
