我有三个 MySql 表:-
- tbl_part - 包含具有 part_id 的部件列表
- tbl_product - 包含带有 product_id 的产品列表
- tbl_part_to_product - 包含零件和产品之间的一对多关系(part_id & product_id)
我正在尝试做两件事:-
- 选择所有只有一个部件的产品。
- 查找所有仅具有特定零件的产品,因为只有零件。
我有三个 MySql 表:-
我正在尝试做两件事:-
SELECT
*
FROM
tbl_part part
INNER JOIN tbl_part_to_product p2p ON part.part_id = p2p.part_id
INNER JOIN tbl_product prod ON p2p.product_id =prod.product_id
WHERE part.name = 'whatever'
GROUP BY prod.product_id
HAVING COUNT(*) = 1
要选择只有一个部分的所有产品,只需删除 WHERE 子句。
如果您不想加入零件表:
SELECT
*
FROM
tbl_product prod
INNER JOIN tbl_part_to_product p2p ON p2p.product_id =prod.product_id
GROUP BY prod.product_id
HAVING COUNT(*) = 1
让我们解决这两个问题:
选择所有只有一个部件的产品。
SELECT tbl_product.*
FROM
tbl_product product
INNER JOIN tbl_part_to_product ptop ON ptop.product_id = product.product_id
GROUP BY product.product_id
HAVING COUNT(ptop.part_id) = 1
查找所有仅具有特定零件的产品,因为只有零件。
SELECT tbl_product.*
FROM
tbl_product product
INNER JOIN tbl_part_to_product ptop ON ptop.product_id = product.product_id
INNER JOIN tbl_part part ON ptop.part_id = part.part_id
WHERE part.part_name = 'some name'
GROUP BY product.product_id
HAVING COUNT(ptop.part_id) = 1
如果您从任一查询中得到 GROUPing 错误,则需要将所有 tbl_product 字段添加到 GROUP。