有条件的内部连接在Oracle中

有条件的内部连接在Oracle中

问题描述:

我有关于条件内部连接的问题。请看下面的sqlfiddle。有条件的内部连接在Oracle中

http://sqlfiddle.com/#!4/6dc88 

在这里,我试图让所有的同名。但是如果ID为1,那么也会得到相同的名称和ID为0的名称。你的帮助将被appriciated。谢谢。这里是例子

Table1 
Id   |   Name 
1   |   A 
2   |   B 
3   |   C 

Table2 
Id   |   Name 
1   |   a 
2   |   b 
3   |   c 
0   |   d 

这是我期待

A   |   a 
B   |   b 
C   |   c 
A   |   d 

编辑:对不起,我忘了说我的查询,这里是我到目前为止已经试过..

select t1.name, t2.name from table1 t1 
inner join table2 t2 on 
CASE 
WHEN t1.id = t2.id_copy and t1.id = 1 THEN 
    0 
    else 
    t1.id 
END = t2.id_copy 

在此先感谢。

+2

您的查询是什么? – ytg 2015-04-02 08:37:40

+2

虽然在您的问题中包含指向SQL小提琴的链接通常是一个好主意,但也请将您的SQL语句添加到问题中。 – 2015-04-02 08:37:46

+0

@ytg我编辑了这个问题。 – 2015-04-02 08:42:23

假设你的意思是,如果table2.id为0,那么它应该与table1.id = 1,那么这应该做的伎俩:

with table1 as (select 1 id, 'A' name from dual union all 
       select 2 id, 'B' name from dual union all 
       select 3 id, 'C' name from dual), 
    table2 as (select 1 id, 'a' name from dual union all 
       select 2 id, 'b' name from dual union all 
       select 3 id, 'c' name from dual union all 
       select 0 id, 'd' name from dual) 
select t1.name, t2.name 
from table1 t1 
     inner join table2 t2 on (t1.id = case when t2.id = 0 then 1 else t2.id end); 

NAME NAME_1 
---- ------ 
A a  
B b  
C c  
A d  

如果有什么左右决定如何不匹配(t1.id = t2.id)排在表2比赛与表1,那么你就必须解释的逻辑更复杂的逻辑。

个人而言,我更喜欢使用简单的东西,如:

select t1.name, t2.name from table1 t1 
inner join table2 t2 
on t1.id = t2.id_copy or (t1.id = 1 and t2.id_copy = 0)