【发布时间】:2021-02-13 09:31:36
【问题描述】:
我正在尝试使用 CASE WHEN 语句来确定将哪个表用于 JOIN 的后半部分。例如,有 3 个表:TableA、TableB、TableC。
SELECT a.column1, b.column2
FROM
TableA as a
FULL OUTER JOIN
CASE WHEN condition1 THEN TableB as b
ELSE TableC as b
END
ON a.ID = b.ID
Example:
TableA
ID: 1 2 3
Column1: 10 20 30
TableB
ID: 1 2 3
Column2: 100 200 300
TableC
ID: 1 2 3
Column2: 1000 2000 3000
-- Result 1 --> CASE WHEN statement is true, TableA and TableB are joined
Column1: 10 20 30
Column2: 100 200 300
-- Result 2 --> CASE WHEN statement is false, TableA and TableC are joined
Column1: 10 20 30
Column2: 1000 2000 3000
我一直想使用 TableA 进行连接,但是根据特定条件,我想加入 TableB 或 TableC。无论使用哪个第二个表进行连接,我都希望它被引用为“b”,以便 ON 条件可以只使用 b.ID,而 SELECT 语句将始终使用 b.column2
【问题讨论】:
-
请提供样本数据和期望的结果。 SQL 查询以
SELECT开头,而不是TableA,因此您的代码不是有效的查询。 -
(1) 在同一个
from子句中不能有两个具有相同别名的表,因此您的问题的最后一部分是不可能的 (2) 请提供示例数据和所需结果;你所要求的仍然可能是可行的,虽然不是你想象的那样。 -
添加了一个例子!
标签: sql left-join inner-join