2
brand(id, parent_id, name)
      1 |     0    | Apple
      2 |     0    | Samsung
      3 |     1    | Iphone 3S
      4 |     1    | Iphone 4S
product(id, name)
        1 | OS
        2 | Andriod
product_brand(product_id, brand_id)
                  1     |    3
                  1     |    4

そしてmysql:product nameいつ取得するかbrand name = Apple

SELECT * FROM product_brand
LEFT JOIN brand ON brand.id = product_brand.brand_id
WHERE brand.id = 1 // Apple

例: Apple(id=1) を取得した場合 => OS、Samsung(id=2) を取得した場合 => Andriod

4

3 に答える 3

1

これを試して:

SELECT
  p.name
FORM product p
LEFT JOIN product_brand pb ON p.id = pb.product_id
LEFT JOIN brand b ON pb.brand_id = b.id
LEFT JOIN brand b1 ON b.id = b1.parent_id
WHERE b1.name = 'Apple' 
于 2012-06-27T02:10:07.403 に答える
1

のような意味ですか

SELECT
  childbrand,name AS child_brand_name
  product.name AS product_name
FROM brand AS childbrand
INNER JOIN brand AS parentbrand ON parentbrand.id=childbrand.parent_id
INNER JOIN product_brand ON product_brand.brand_id=childbrand.id
INNER JOIN product ON product_brand.product_id=product.id
WHERE parentbrand.name='Apple';
于 2012-06-27T02:13:59.493 に答える
1

product_brand に保存されていない Apple と Samsung の製品名を取得したい場合 (サンプル データから参照してください)。以下のようにクエリを修正できます。

 SELECT *,
    CASE b.name WHEN 'Apple' THEN 'iOS'
    WHEN 'Samsung' THEN 'Android' ELSE '-' END  
   FROM
    brand b

編集2:parent_idに基づいてすべての製品名を取得したい場合。以下を試すことができます:

SELECT *,
    CASE b.name WHEN 'Apple' THEN 'iOS'
    WHEN 'Samsung' THEN 'Android' ELSE '-' END as type_of_os
FROM
    brand b 
WHERE parent_id=0
UNION
SELECT
    b.*,
    CASE b2.name WHEN 'Apple' THEN 'iOS'
    WHEN 'Samsung' THEN 'Android' ELSE '-' END as type_of_os
FROM
    brand b
INNER JOIN
    brand b2 ON b.parent_id = b2.id 

http://sqlfiddle.com/#!2/1f573/18

于 2012-06-27T02:18:19.137 に答える