3

我有三个 MySql 表:-

  • tbl_part - 包含具有 part_id 的部件列表
  • tbl_product - 包含带有 product_id 的产品列表
  • tbl_part_to_product - 包含零件和产品之间的一对多关系(part_id & product_id)

我正在尝试做两件事:-

  1. 选择所有只有一个部件的产品。
  2. 查找所有仅具有特定零件的产品,因为只有零件。
4

2 回答 2

4
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
于 2012-12-20T15:05:25.577 回答
0

让我们解决这两个问题:

选择所有只有一个部件的产品。

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。

于 2012-12-20T15:22:50.313 回答