Mysql

使用映射表時獲取未映射記錄的計數

  • March 3, 2022

我有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

引用自:https://dba.stackexchange.com/questions/308219