select if为null

时间:2013-03-19 18:26:38

标签: sql sql-server sql-server-2008 inner-join

我需要进行两个表的内连接,但是,想知道如何解决这种情况:

如果第二个表中的字段为NULL,则他与另一个字段进行内连接。

你能举个例子吗?

由于

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

最简单的是probalby将第二个表视为两个不相交的表:

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

答案 2 :(得分: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。

答案 3 :(得分:1)

试试这个:

    select * from a 
    inner join b on 
    (case when b.columntojoin is null then b.alternatecolumn else b.columntojoin end) 
    = a.columntojoin