2012-08-28 34 views
-1

我有两个表格,说T1T2和一列C是共同的两个。我需要一个SQL查询,其中如果CnullT1它将从其他表中选择。选择是否sql

我试图在THEN子句中写入SELECT语句但未运行。不知道SQL中是否有任何IF ELSE子句。

Select C, case when c = null Then Select c from T2 
from T1 
+0

他们需要先加入,在那里他们可以加入一个领域? –

回答

5

更妙的是,大多数的RDBMS支持COALESCE,它可以让你检查多个值,并返回第一个非空值。

SELECT COALESCE(T1.C, T2.C) AS C 
FROM T1 
LEFT OUTER JOIN T2 ON T1.[Primary Key] = T2.[Primary Key] 
+0

谢谢..我正在考虑避免加入...但是..这是完美的工作。尽管我已经使用NVL。 – user1544460

0

你似乎需要的是一个工会

select c from t1 
where c is not null 
union 
select c from t2 
where c is not null 

现在你会得到一个结果集,但只有当所有不为空列CT1T2

嘛,当然如果这简化了你的问题太多了,你需要使用的联接

select coalesce(t1.c,t2.c) as c 
     from t1 
left join t2 on (t2.id = t1.foreign_id) 

这个假设T2.ID是主键和相关T1T1.FOREIGN_ID

是非常重要的你做了一个左连接,否则当T2中的行也存在时,你只能得到T1行。

+0

联合结果是连续的,即结果集包含T1和T2的行吗?无论如何,我已经使用加入来解决问题。谢谢您的帮助。 – user1544460

0

这是在TransactSQL?

我喜欢的第一个答案,但是你也可以这样来做...

select case t1.C 
    when null then t2.C 
    else t1.C 
    end as [testC] 
from t1 
inner join t2 
on t1.PKID = t2.PKID