1

結合するテーブルが 2 つあります。

Table 1マスター表であり、一意の行セットが含まれています。

ID DESCRIPTION
01 Alpha
02 Gamma
03 Delta
04 Beta

Table 2多くの行を含む詳細表で、一部の行のみがマスター表と一致します。

ID   INFO MASTER_ID
0001 abc  02
0002 def  02
0004 xyz  01
0005 mno  04

次の結果を生成するためにテーブルを結合したい:

Alpha "has detail"
Gamma "has detail"
Delta "does not have detail"
Beta "has detail"

それよりも:

Alpha "has detail"
Gamma "has detail"
Gamma "has detail"
Delta "does not have detail"
Beta "has detail"

後の出力はガンマを 2 回返していますが、1 回だけ返したいと思っています。

LEFT JOIN、RIGHT JOIN、INNER JOIN を試しましたが、どれも望ましい結果をもたらしません。

助けてくれてありがとう。

4

6 に答える 6

3

おそらくあなたはLEFT JOIN何かが欠けている

SELECT  CONCAT(a. description, IF(b.master_ID IS NOT NULL, ' has detail',' does not have detail'))
FROM    table1 a
        LEFT JOIN (SELECT DISTINCT master_ID FROM table2) b
            ON a.ID = b.master_ID
于 2012-10-31T15:57:30.100 に答える
1

多分このようなもの:

SELECT
    Table1.DESCRIPTION,
    (
        CASE 
            WHEN EXISTS(SELECT NULL FROM Table2 WHERE Table2.MASTER_ID=Table1.ID)
            THEN 'has detail'
            ELSE 'does not have detail'
        END
    ) AS has
FROM
    Table1
于 2012-10-31T15:57:18.087 に答える
1

ちょうど別のアプローチ:

SELECT
  table1.description,
  IF((EXISTS(SELECT master_id from table2  where table2.master_id = table1.id)),
    'has detail',
    'does not have detail') As Status
FROM table1
于 2012-10-31T16:21:58.667 に答える
0
SELECT a.Description, IF(b.Info, "has detail", "does not have detail") as Status
FROM Table_1 a
LEFT OUTER JOIN Table_2 b
ON a.MASTER_ID = b.MASTER_ID
GROUP BY 1,2;
于 2012-10-31T16:07:33.420 に答える
0

groupby を使用してこれを達成することもできます

SELECT a.Description, IF(count(b.id) > 0, "has detail", "does not have detail") as Status
FROM Table1 a
LEFT OUTER JOIN Table2 b
ON a.iD = b.MASTER_ID
GROUP BY a.Description ORDER BY a.Description ASC
于 2012-10-31T16:14:26.090 に答える
0

出力に詳細部分が含まれている場合は、(有効な結果であるため) 両方の行を表示するか、FIRST、MAX などを選択して結果を集計する必要があります。

詳細値自体が必要ない場合は、2 つの SELECT を実行して UNION を使用することもできます。

    SELECT DISTINCT Table1.Description, "does not have detail" as Comment
    FROM Table1
    LEFT JOIN Table2 ON (Table1.ID = MASTER_ID)
    WHERE Table2.id IS NULL

    UNION 

    SELECT DISTINCT Table1.Description, "has detail" as Comment
    FROM Table1
    LEFT JOIN Table2 ON (Table1.ID = MASTER_ID)
    WHERE Table2.id IS NOT NULL
于 2012-10-31T16:10:25.350 に答える