私は3つのMySqlテーブルを持っています:-
- tbl_part-part_idを持つパーツのリストが含まれています
- tbl_product-product_idを持つ製品のリストが含まれています
- tbl_part_to_product-部品と製品の間の1対多の関係が含まれています(part_id&product_id)
私は2つのことをしようとしています:-
- パーツが1つしかないすべての製品を選択します。
- 一部のみであるため、特定の部分のみを含むすべての製品を検索します。
私は3つのMySqlテーブルを持っています:-
私は2つのことをしようとしています:-
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
パーツが 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
両方の質問に答えましょう:
パーツが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に追加する必要があります。