2015-04-02 35 views
1

我有關於條件內部連接的問題。請看下面的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

回答

2

假設你的意思是,如果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,那麼你就必須解釋的邏輯更復雜的邏輯。

2

個人而言,我更喜歡使用簡單的東西,如:

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)