基于存在的内连接表a或b

时间:2017-09-06 07:18:39

标签: sql oracle

我有这三张桌子:

表A

---------------------------
|KEY | VALUE_A1 | VALUE_A2|
---------------------------

表B

------------------------------
|KEY | APPLICATION | VALUE_B1|
------------------------------

表C

------------------------------
|KEY | APPLICATION | VALUE_C1|
------------------------------

我想根据B或C中应用程序的存在返回A.VALUE_A1,A.VALUE_A2以及B.VALUE_B1或C.VALUE_C1。此应用程序在de script中的de where-clause中给出。

实施例: 表A有10条记录。表B包含6个带有应用程序“APP1”的记录。表C包含4个带有应用程序“APP2”的记录。表B和C都通过KEY连接到表A.如果给出的应用程序是'APP1',那么我想返回B.VALUE_B1。如果给出“APP2”,我想返回C.VALUE_C1。

是否可以根据类似CASE的情况对两个表中的一个表进行INNER JOIN?

1 个答案:

答案 0 :(得分:2)

不是INNER JOIN而是LEFT JOIN就像这样

select A.KEY
       A.VALUE_A1, A.VALUE_A2,
       CASE WHEN B.VALUE_B1 IS NOT NULL THEN B.VALUE_B1 ELSE C.VALUE_C1 END AS RESULT_VALUE
from A
    LEFT JOIN B on A.key=B.key
    LEFT JOIN C on A.key=C.key

更新:有另一种选择

select A.KEY
       A.VALUE_A1, A.VALUE_A2,
       sub.VALUE AS RESULT_VALUE
from A
    INNER JOIN (SELECT KEY, VALUE_B1 as VALUE
                FROM B
                UNION ALL
                SELECT KEY, VALUE_C1 as VALUE
                FROM C) sub on A.KEY=sub.KEY