【发布时间】:2021-01-27 22:07:58
【问题描述】:
我有以下表格:
Table T1
--------------------------
ZID | NAME
------------------------
1 | Test
Table C1
--------------------------
ZID | VALUE1
------------------------
1 | A
1 | B
Table S1
--------------------------
ZID | VALUE2
------------------------
1 | C
1 | D
我想要一个选择查询来获取以下值
----------------------------------
ZID | NAME | VALUE1 | VALUE2
----------------------------------
1 | Test | A | null
1 | Test | B | null
1 | Test | null | C
1 | Test | null | D
我可以通过使用UNION 来实现上述目的,方法是在每个选择中伪造一列,如下所示。
SELECT
ZID,
NAME,
VALUE1,
NULL AS VALUE2
FROM
T1
LEFT JOIN C1 ON (
T1.ZID = C1.ZID
)
UNION ALL
(
SELECT
ZID,
NAME,
NULL AS VALUE1,
VALUE2
FROM
T1
LEFT JOIN S1 ON (
T1.ZID = S1.ZID
)
);
是否可以使用 JOINS 在单次选择中检索上述数据?我曾尝试使用左连接,但结果中的数据是笛卡尔积。
【问题讨论】:
-
戈登的回答巧妙地满足了您的要求。但我希望您的两个
LEFT JOIN中的UNION ALL(使用表限定zid修复语法)在许多情况下会更快。看不出排除UNION的理由?另外:Postgres 在查询中不需要任何括号。 -
谢谢欧文。是的,括号是为了我的利益。它有助于我更好地理解。
标签: sql postgresql h2