2015-04-02 3 views
1

У меня проблема с условным внутренним соединением. Пожалуйста, взгляните на следующий sqlfiddle.Условное внутреннее соединение в Oracle

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

Здесь я пытаюсь получить все то же имя. но если в случае, когда id равен 1, то также получите одно и то же имя и имя с идентификатором 0. Ваша помощь будет назначена. Благодарю. вот пример

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 

Edit: К сожалению я забыл упомянуть мой вопрос, вот что я пытался до сих пор ..

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

+2

Хотя включение ссылки на скрипт SQL в ваш вопрос, как правило, хорошая идея, пожалуйста, также добавьте свои SQL-запросы в вопрос. –

+0

@ytg У меня есть вопрос. –

ответ

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) строк в table2 матче с table1, то вам придется объяснить логику.

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) 
Смежные вопросы