2 つのテーブルの内部結合を作成する必要がありますが、この状況を解決する方法を知りたがっています。
2 番目のテーブルのフィールドが NULL の場合、彼は別のフィールドとの内部結合を行います。
例を教えてください。
ありがとう
2 つのテーブルの内部結合を作成する必要がありますが、この状況を解決する方法を知りたがっています。
2 番目のテーブルのフィールドが NULL の場合、彼は別のフィールドとの内部結合を行います。
例を教えてください。
ありがとう
あなたが達成しようとしているものに依存します...
CREATE TABLE #X
(
[Id] INT,
[Name] VARCHAR(100)
)
INSERT INTO #X VALUES
(1,'michaeljackson'),
(2,'jim'),
(3,'jill'),
(4,'j')
CREATE TABLE #Y
(
[Id] INT,
[AlternateId] INT,
[Score] INT
)
INSERT INTO #Y VALUES
(1,1,10),
(2,2,20),
(3,3,30),
(4,4,40),
(NULL,2,50)
--will join all of the records in #x to the null record
SELECT *
FROM #X x
INNER JOIN #Y y
ON
x.Id = COALESCE(y.Id,x.Id)
--will join just to the ID = 4 record
SELECT *
FROM #X x
INNER JOIN #Y y
ON
x.Id = COALESCE(y.Id,4)
--redirect and let join use alternative field
SELECT *
FROM #X x
INNER JOIN #Y y
ON
x.Id = COALESCE(y.Id,y.AlternateId)
--maybe you want to actually do a FULL OUTER JOIN!
SELECT *
FROM #X x
FULL OUTER JOIN #Y y
ON
x.Id = y.Id
次のように、2 番目のテーブルを 2 つのばらばらのテーブルと見なすのが最も簡単です。
select *
from a
join (
select NewKey = key1, * from b where b.key1 is null
union all
select NewKey = key2, * from b where b.key1 is not null
) b on b.NewKey = a.key
以下は適切に機能するはずだと思います。
SELECT *
FROM tblA a
INNER JOIN tblB b ON (b.Col1 IS NOT NULL AND b.Col1 = a.Col1) OR (b.Col1 IS NULL AND b.Col2 = a.Col2)
b.Col1 が NULL でない場合は Col1 に結合し、それ以外の場合は NULL の場合は Col2 に結合します。
これを試して:
select * from a
inner join b on
(case when b.columntojoin is null then b.alternatecolumn else b.columntojoin end)
= a.columntojoin