我有这三张桌子:
表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?
答案 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