【问题标题】:SQL join to override particular column of left tableSQL连接覆盖左表的特定列
【发布时间】:2017-01-06 07:45:24
【问题描述】:

我有两个表,分别是 Table1Table2
Table1

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

表2

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

我需要连接表 1 和表 2,因此如果表 2 中验证的列是 Y,我需要表 2 中的 custName 而不是表 1。
因此,所需的输出是:(如果该 custId 的验证列是 Y,则从 Table2 覆盖 custName 列

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'

【问题讨论】:

  • NVL在Oracle中可用,所以RDBMS是Oracle

标签: sql sql-server oracle join rdbms


【解决方案1】:

您可以使用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 数据库作为好吧)

希望对你有帮助!!!

【讨论】:

    【解决方案2】:

    尝试此查询一次..

    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
    

    【讨论】:

      【解决方案3】:
      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        相关资源
        最近更新 更多