SQL条件连接

时间:2017-05-29 10:32:42

标签: sql

我要求有条件地加入两张桌子。 对于Ex:

T1
--Col1
--Col2
--Col3
T2
--Col1
--Col2
--Col3

从两个表中加入Col1上的T1和T2,如果Col1为NULL,则从两个表中加入Col2上的T1和T2。 怎么做到这一点?

5 个答案:

答案 0 :(得分:1)

您可以使用下面的查询,该查询使用case crtieria中的join条件

select * 
from 
 t1 join t2 
on 
 case 
   when (t1.col1 is NULL or t2.col1 is NULL)
   then t1.col2
   else t1.col1
 end
  =
 case 
   when (t1.col1 is NULL or t2.col1 is NULL)
   then t2.col2
   else t2.col1
 end

答案 1 :(得分:0)

SELECT
*
FROM
    T1 INNER JOIN T2 
ON T1.COL1=T2.COL1 OR T1.COL2=T2.COL2

答案 2 :(得分:0)

你的条件含糊不清。如果col1只在一个表中NULL,会怎样?

在任何情况下,您都可以将逻辑指定为:

select . . .
from t1 join
     t2
     on (t1.col1 = t2.col1) or
        ( (t1.col1 is null or t2.col1 is null) and t1.col2 = t2.col2)

如果任一列为NULL,则第一个条件将失败。

答案 3 :(得分:0)

我正在使用内联视图。检查此查询。

select * from
(select t1.col1,t1.col2,t1.col3 from table1 t1)q1,
(select t2.col1,t2.col2,t2.col3 from table1 t2)q2
where t1.col1=t2.col1 or t1.col2=t2.col2;

答案 4 :(得分:0)

全部谢谢:)

我只是提出以下问题,请告诉我这是否有效。

Select * from
(select col1, col2, col3, coalesce(col1, col2) as join_key)q1,
(select col1, col2, col3, coalesce(col1, col2) as join_key)q1,
where q1.join_key = q2.join_key