私は3つのテーブルを持っています
Table 1
ID ParentID
234 456
123 456
344 789
表2
ID col1 col2 CID
234 x 879 3
456 x x 2
987 x x 1
344 x x 5
999 x x 6
表3
TID col1 col2 col3
1 x X x
2 x x x
3 x x x
4 x x x
5 x x x
私は達成しようとしています
table1の一致および不一致IDと親IDの結果を、フラグが一致/不一致の「Y」および「N」を使用して新しいtable4に保存する必要があります。
一致したIDの場合、CID = TIDに基づいてテーブル3からcol3の値を取得し、テーブル4に保存する必要があります
サブクエリを作成しようとしています。一致するクエリを取得して、さらに先に進みます。
SELECT * FROM table1 t1 INNER JOIN table2 t2 ON t1.ID=t2.ID AND t1.ParentID=t2.ID
しかし、テーブル1のID「123」ではなく1行しか取得していません
結果表
ID ParentID
234 456
誰かがこれについて私を助けてくれますか?
ありがとう!
LEFT JOIN
それぞれID
との一致する値と一致しない値を取得するために、2回使用できますParentID
。また、JOIN
最後のテーブルまで実行するために結果を具体化する必要もありません。
DECLARE @DataSource01 TABLE
(
[ID] SMALLINT
,[ParentID] INT
);
DECLARE @DataSource02 TABLE
(
[ID] SMALLINT
,[col1] CHAR(1)
,[col2] VARCHAR(3)
,[CID] TINYINT
);
DECLARE @DataSource03 TABLE
(
[TID] SMALLINT
,[col1] CHAR(1)
,[col2] CHAR(1)
,[col3] CHAR(1)
);
INSERT INTO @DataSource01 ([ID],[ParentID])
VALUES (234, 456)
,(123, 456)
,(344, 789);
INSERT INTO @DataSource02 ([ID], [col1], [col2], [CID])
VALUES (234, 'x', '879', 3)
,(456, 'x', 'x', 2)
,(987, 'x', 'x', 1)
,(344, 'x', 'x', 5)
,(999, 'x', 'x', 6);
INSERT INTO @DataSource03 ([TID], [col1], [col2], [col3])
VALUES (1, 'x', 'X', 'x')
,(2, 'x', 'x', 'x')
,(3, 'x', 'x', 'x')
,(4, 'x', 'x', 'x')
,(5, 'x', 'x', 'x');
SELECT DS1.[ID]
,DS1.[ParentID]
,CASE WHEN DS2_1.[ID] IS NULL THEN 'N' ELSE 'Y' END
,CASE WHEN DS2_2.[ID] IS NULL THEN 'N' ELSE 'Y' END
FROM @DataSource01 DS1
LEFT JOIN @DataSource02 DS2_1
ON DS1.[ID] = DS2_1.[ID]
LEFT JOIN @DataSource02 DS2_2
ON DS1.[ParentID] = DS2_2.[ID];
SELECT DS1.[ID]
,DS1.[ParentID]
,CASE WHEN DS2_1.[ID] IS NULL THEN 'N' ELSE 'Y' END
,CASE WHEN DS2_2.[ID] IS NULL THEN 'N' ELSE 'Y' END
,DS3.[TID]
FROM @DataSource01 DS1
LEFT JOIN @DataSource02 DS2_1
ON DS1.[ID] = DS2_1.[ID]
LEFT JOIN @DataSource02 DS2_2
ON DS1.[ParentID] = DS2_2.[ID]
LEFT JOIN @DataSource03 DS3
ON DS2_1.[CID] = DS3.[TID];
これがデータ結合の基本です。これで、必要なことは何でもできます(PIVOT、マテリアライズ、フィルター処理)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加