将不同的表与相同的列组合而不会产生任何影响

时间:2017-11-10 00:11:55

标签: sql oracle

我有查询问题。我有3张桌子。

table A 
    ----------------------------
    NAME   | CODE
    ----------------------------
    bob    | PL
    david  | AA
    susan  | PL
    joe    | AB


table B 
    ----------------------------
    CODE | DESCRIPTION
    ----------------------------
    PL   | code 1
    PB   | code 2 
    PC   | code 3

table C 
    ----------------------------
    CODE | DESCRIPTION
    ----------------------------
    AA   | code 4
    AB   | code 5 
    AC   | code 6

表B和C具有唯一的行。 我需要的结果:

    ----------------------------
    NAME   | CODE | DESCRIPTION
    ----------------------------
    bob    | PL   | code 1
    david  | AA   | code 4
    susan  | PL   | code 1
    joe    | AB   | code 5

到目前为止我尝试了什么

http://sqlfiddle.com/#!9/ffb2eb/9

2 个答案:

答案 0 :(得分:3)

你很亲密。我想你只需要COALESCE()

select A.*, coalesce(B.DESCRIPTION, C.DESCRIPTION) as description
from A left join
     B
     on A.CODE = B.CODE left join
     C
    on A.CODE = C.CODE
order by A.NAME;

答案 1 :(得分:1)

我认为UNION会做到这一点。此外,如果存在重复,它也将删除重复项。

SELECT  A.NAME , UN.CODE ,UN.DESCRIPTION 
FROM A,
     (SELECT CODE,DESCRIPTION FROM B 
      UNION 
     SELECT CODE,DESCRIPTION FROM C ) UN 
WHERE A.CODE = UN.CODE;