我有3个表要连接,以获得以下格式的输出。
我的表1是这样的:
--------------------------------------------------------
T1_ID1 | T1_ID2 | NAME
--------------------------------------------------------
123 | T11231 | TestName11
123 | T11232 | TestName12
234 | T1234 | TestName13
345 | T1345 | TestName14
--------------------------------------------------------
我的表2就像:
--------------------------------------------------------
T2_ID1 | T2_ID2 | NAME
--------------------------------------------------------
T11231 | T21231 | TestName21
T11232 | T21232 | TestName21
T1234 | T2234 | TestName22
--------------------------------------------------------
我的3号桌就像这样
----------------------------------------------------------
T3_ID1 | TYPE | REF
----------------------------------------------------------
T21231 | 1 | 123456
T21232 | 2 | 1234@test.com
T2234 | 2 | 123@test.com
----------------------------------------------------------
我想要的输出是:
------------------------------------------------------
T1_ID1 | PHONE | EMAIL
------------------------------------------------------
123 | 123456 | 1234@test.com
234 | | 123@test.com
345 | |
------------------------------------------------------
要求:
- 表1的T1_ID2与表2的T2_ID1左联接。
- 表2的T2_ID2与表3的T3_ID1左联接。
- 如果值为phone,则表3的TYPE指定1;如果值为email,则指定2。
- 我的输出应该包含表1的T1_ID1及其表3中REF的相应值,REF在同一行中。也就是说,在本例中,值为123的T1_ID1同时具有电话和电子邮件。因此,它在输出中显示在同一行中。
- 如果只有phone可用于T1_ID1的相应值,则应在结果中将phone填充为空,并将email填充为空,反之亦然。
- 如果电话和电子邮件都不可用,则不应填充任何内容。
我试过下面的SQL,但是没有成功。我错过了什么?请提供你的帮助。
选项1:
SELECT DISTINCT
t1.t1_id1,
t3.ref
|| (
CASE
WHEN t3.type = 1 THEN
1
ELSE
0
END
) phone,
t3.ref
|| (
CASE
WHEN t3.type = 2 THEN
1
ELSE
0
END
) email
FROM
table1 t1
LEFT JOIN table2 t2 ON t1.t1_id2 = t2.t2_id1
LEFT JOIN table3 t3 ON t2.t2_id2 = t3.t3_id1;
选项2:
SELECT DISTINCT
t1.t1_id1,
t3.ref,
(
CASE
WHEN t3.type = 1 THEN
1
ELSE
0
END
) phone,
t3.ref,
(
CASE
WHEN t3.type = 2 THEN
1
ELSE
0
END
) email
FROM
table1 t1
LEFT JOIN table2 t2 ON t1.t1_id2 = t2.t2_id1
LEFT JOIN table3 t3 ON t2.t2_id2 = t3.t3_id1;
选项3:
SELECT DISTINCT
t1.t1_id1,
(
CASE
WHEN t3.type = 1 THEN
1
ELSE
0
END
) phone,
(
CASE
WHEN t3.type = 2 THEN
1
ELSE
0
END
) email
FROM
table1 t1
LEFT JOIN table2 t2 ON t1.t1_id2 = t2.t2_id1
LEFT JOIN table3 t3 ON t2.t2_id2 = t3.t3_id1;
1条答案
按热度按时间dluptydi1#
如果table2中每个t2_id2条目在table3中最多有一个电话和一个电子邮件。