2017-01-06 2 views
0

У меня есть две таблицы, а именно, Table1 и Table2
Table1SQL присоединиться переопределить конкретный столбец левой таблицы

custId--custName--custAge 
c1--c1name--32 
c2--c2name--41 
c3--c3name--41 

Table2

custId--verified--custName 
c1--Y--c1FullName 
c2--N--c2FullName 

мне нужно join Table1 и Table2, так что если проверенный столбец Y в таблице 2, мне нужно custName из таблицы2 вместо таблицы 1.
Таким образом, желаемый результат: (перезапись custName столбец Table2 если проверить столбец Y для этого CustID)

custId--custName--custAge 
c1--c1FullName--32 
c2--c2name--41 
c3--c3name--41 

Я написал следующий запрос, который не дает должного результата. Пожалуйста помоги.

select T1.custId, NVL(T2.custName, T1.custName),T1.custAge 
from Table1 T1 
left join Table2 T2 on T1.custId=T2.custId and T2.verified='Y' 
+2

Tag собственно RDMS. – Viki888

+0

['NVL'] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm) доступен в Oracle, поэтому RDBMS - это Oracle – Arulkumar

ответ

4

Вы можете использовать CASE заявление для достижения этой цели:

SELECT  tab1.custId, 
      CASE 
       WHEN (tab2.verified = 'Y') 
       THEN tab2.custName 
       ELSE tab1.custName 
      END AS CustName, 
      tab1.custAge 

FROM  Table1 tab1 
LEFT JOIN Table2 tab2 ON tab1.custId = tab2.custId 

Смотрите это здесь ->http://rextester.com/EVOMK25746 (Эта скрипка построена наSQL Server, однако запрос должен работать наOracleбазы данных)

Надеюсь, что это поможет !!!

+0

. Это сработало :-) – ITQuest

1

Попробуйте этот запрос один раз ..

select * into #tab1 from 
(
select 'c1' custId,'c1name' custName,31 custAge 
union all 
select 'c2' ,'c2name' ,41 
union all 
select 'c3' ,'c3name' ,41 

) as a 

select * into #tab2 from 
(
select 'c1' custId,'Y'verified,'c1FullName' custName 
UNION ALL 
SELECT 'c2','N','c2FullName ' 
) as a 

SELECT T1.custId,CASE WHEN T2.verified='Y' THEN T2.custName ELSE T1.custName END AS CUSTNAME,T1.custAge FROM #tab1 T1 
LEFT JOIN #tab2 T2 ON T1.custId=T2.custId 
0
select custId, custName, custAge 
    from Table1 
     natural join 
     (select custId 
      from Table2 
      where verified='N') t2 
union 
select custId, custName, custAge 
    from (select custId, custAge from Table1) t1 
     natural join 
     (select custId, custName 
      from Table2 
      where verified='Y') t2;