0

私はこれを正しくするのに苦労しています。

1_related というテーブルがあります

id,prod_pack,fk_prod_pack_id,fk_prod_pack_related,fk_prod_pack_related_id
'2', '0', '102', '0', '2482'
'3', '0', '102', '0', '3147'
'2294', '0', '102', '1', '10'

1_products と 1_packages という 2 つのテーブルがあります。

fk_prod_pack_related の値に応じて、どちらかのテーブルの内容を結合したい (1_products テーブルの場合は 0、1_packages テーブルの場合は 1)

このクエリは、1_related から行 2 と 3 を返し、1_products の内容を結合します

SELECT 
    r . *, p . *
FROM
    1_related AS r
        INNER JOIN
    1_products as p ON r.fk_prod_pack_related_id = p.id
        and r.fk_prod_pack_related = 0
WHERE
    r.prod_pack = 0
        and r.fk_prod_pack_id = 102

しかし、1_packagesからのデータも必要なので、これを試しましたが、何も返されません

SELECT 
    r . *, p . *, s . *
FROM
    1_related AS r
        INNER JOIN
    1_products as p ON r.fk_prod_pack_related_id = p.id
        and r.fk_prod_pack_related = 0
        INNER JOIN
    1_packages as s ON r.fk_prod_pack_related_id = s.id
        and r.fk_prod_pack_related = 1
WHERE
    r.prod_pack = 0
        and r.fk_prod_pack_id = 102
4

1 に答える 1

1

クエリの 1 つだけが一致するため、左外部結合が必要です。

SELECT 
    r . *, p . *, s . *
FROM
    1_related AS r
        left outer JOIN
    1_products as p ON r.fk_prod_pack_related_id = p.id
        and r.fk_prod_pack_related = 0
        left outer JOIN
    1_packages as s ON r.fk_prod_pack_related_id = s.id
        and r.fk_prod_pack_related = 1
WHERE
    r.prod_pack = 0
        and r.fk_prod_pack_id = 102
于 2013-01-24T16:30:18.220 に答える