-3

2 つのテーブルの内部結合を作成する必要がありますが、この状況を解決する方法を知りたがっています。

2 番目のテーブルのフィールドが NULL の場合、彼は別のフィールドとの内部結合を行います。

例を教えてください。

ありがとう

4

4 に答える 4

2

あなたが達成しようとしているものに依存します...

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
于 2013-03-19T20:15:34.127 に答える
1

次のように、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
于 2013-03-19T18:29:48.260 に答える
1

以下は適切に機能するはずだと思います。

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 に結合します。

于 2013-03-19T18:31:09.000 に答える
1

これを試して:

    select * from a 
    inner join b on 
    (case when b.columntojoin is null then b.alternatecolumn else b.columntojoin end) 
    = a.columntojoin
于 2013-03-19T18:51:32.767 に答える