【发布时间】:2019-04-14 22:40:27
【问题描述】:
我是编写 SQL 查询的新手,谁能帮我编写以下条件和连接的 SQL 查询?
我有 4 张桌子,比如说 T1、T2、T3 和 T4
T1 have columns a1(PK), a2, a3, a4
T2 have columns b1(PK), a1(FK), b2
T3 have columns c1(PK), a1(FK)
T4 have columns d1(PK), c1(FK), d2, d3
条件:
当
a4 == "xx"时,我想拥有来自T1的所有列如果
T1.a1 == T2.a1和T1.a2 == "x",那么我希望b2作为新列 包含在最终结果中。如果
T3.c1 == T4.c1和T4.d2 == "y",则从d3中取值,需要加入step4如果
T1.a1 == T3.a1和T1.a2 == "z",则来自d3(步骤3)的值应包含在最终结果的新列 中
我正在尝试如下解决,但我不知道如何在最终结果中将第 3 步中的值 d3 添加到 b2。
select T1.a1,T1.a2,T1.a3,T1.a4,T2.b2 from
T1
left join T2 on T1.a1 == T2.a1 AND T1.a2 == "x"
left join (
select T3.a1,T4.d3 from T3,T4
where T3.c1 == T4.c1 AND T4.d2 == "y")
) joined on joined.a1 == T1.a1 and T1.a2 == "z"
where a4 == "xx";
样本数据
T1 table :
a1 | a2 | a3 | a4 |
1 | x | cat| xx |
2 | aa | hat| la |
3 | z | mat| xx |
T2 table :
b1 | b2 | a1 |
11 | 984 | 1 |
22 | 234 | 2 |
T3 table :
c1 | a1 |
111 | 3 |
222 | 7 |
T4 table :
d1 | d2 | d3 | c1 |
1111 | y | 100 | 111 |
2222 | yy | 200 | 333 |
Expected Result :
a1 | a2 | a3 | a4 | new column
1 | x | cat | xx | 984 (from T2.b2)
3 | z | mat | xx | 100 (from T4.d3)
请帮助我更正我的查询。感谢您的帮助。
【问题讨论】:
-
显示样本数据和样本结果会有所帮助。
-
“最终结果中包含在 b2 列(步骤 2)中”是什么意思?
-
@danblack 感谢您的回复。我已经用示例数据和预期的最终结果更新了我的问题
-
@Nick 感谢您的回复。我已经更新了我的问题。我希望在最终结果中包含来自 b2 和 d3 的数据的新列。
-
如果
T1.a2不等于x或z,你想在新列中显示什么?或者你不想要任何结果?当T1.a2 = 'z'但T4.d2 != 'y'时呢?