Mysql
使用映射表時獲取未映射記錄的計數
我有3張這樣的桌子
產品
小販
產品供應商
我將如何查找未映射到特定供應商的產品數量。
我試過:
SELECT COUNT(pr.id) AS product_count FROM products pr LEFT JOIN vendor_product_map vp ON pr.id = vp.product LEFT JOIN vendors vv ON vp.vendor = vv.id WHERE vv.id = 3 AND vp.vendor IS NULL
但這似乎不對。任何幫助表示讚賞
編輯:對於上述數據,預期結果將是
未映射的產品
簡而言之,未映射的產品數 = 總產品數 - 特定供應商的映射產品數,我將指定供應商 ID,因此結果集將只有 1 行。希望澄清。
我讓它使用
not exists
和一個子查詢工作。SELECT COUNT(pr.id) AS product_count FROM products pr WHERE NOT EXISTS( SELECT * FROM vendor_product_map vp WHERE vp.product = pr.id AND vp.vendor = 3 )
如果您確定產品將始終正確連結到供應商,則可以使用 INNER JOIN,並簡單地過濾掉 vender_id = 3 的結果。
SELECT COUNT(*) AS product_count FROM products AS pr INNER JOIN vendor_product_map AS vp ON pr.id = vp.product WHERE vp.vendor <> 3
如果 vendor 可能永遠為 NULL,並且您也想要這些結果,那麼您會想要堅持使用 LEFT JOIN,就像這樣……
SELECT COUNT(*) AS product_count FROM products AS pr LEFT JOIN vendor_product_map AS vp ON pr.id = vp.product WHERE vp.vendor <> 3 OR vp.vendor IS NULL