SQL:组合表的查询
我有以下MySQL表: 表A: 表B: 表C: 表D: 表A中的类型字段引用了另一个表:SQL:组合表的查询,sql,join,Sql,Join,我有以下MySQL表: 表A: 表B: 表C: 表D: 表A中的类型字段引用了另一个表: 0 -> B 1 -> C 2 -> D t_id是指该特定表中的id 现在,我正在寻找一个能给出以下结果的查询: id type t_id b c d --------------------------------- 1 0 1 ba - - 2 0 2 bb - - 3
0 -> B
1 -> C
2 -> D
t_id是指该特定表中的id
现在,我正在寻找一个能给出以下结果的查询:
id type t_id b c d
---------------------------------
1 0 1 ba - -
2 0 2 bb - -
3 0 3 bc - -
4 0 4 bd - -
5 0 5 be - -
6 1 1 - ca -
7 1 2 - cb -
8 1 3 - cc -
9 1 4 - cd -
10 1 5 - ce -
11 2 1 - - da
12 2 2 - - db
13 2 3 - - dc
14 2 4 - - dd
15 2 5 - - de
- should be an empty field.
这在MySQL中可能吗?另一个替代解决方案是使用
左连接
SELECT A.id, A.type, A.t_id, B.b, NULL AS c, NULL AS d
FROM A JOIN B ON A.t_id = b.id
WHERE A.type = 0
UNION ALL
SELECT A.id, A.type, A.t_id, NULL, C.c, NULL
FROM A JOIN C ON A.t_id = c.id
WHERE A.type = 1
UNION ALL
SELECT A.id, A.type, A.t_id, NULL, NULL, D.d
FROM A JOIN D ON A.t_id = d.id
WHERE A.type = 2;
SELECT a.*,
CASE WHEN a.type = 0 THEN b.b ELSE NULL END b,
CASE WHEN a.type = 1 THEN c.c ELSE NULL END c,
CASE WHEN a.type = 2 THEN d.d ELSE NULL END d
FROM tableA a
LEFT JOIN tableB b
ON a.t_id = b.id
LEFT JOIN tableC c
ON a.t_id = c.id
LEFT JOIN tableD d
ON a.t_ID = d.id
左连接
SELECT a.*,
CASE WHEN a.type = 0 THEN b.b ELSE NULL END b,
CASE WHEN a.type = 1 THEN c.c ELSE NULL END c,
CASE WHEN a.type = 2 THEN d.d ELSE NULL END d
FROM tableA a
LEFT JOIN tableB b
ON a.t_id = b.id
LEFT JOIN tableC c
ON a.t_id = c.id
LEFT JOIN tableD d
ON a.t_ID = d.id
id type t_id b c d
---------------------------------
1 0 1 ba - -
2 0 2 bb - -
3 0 3 bc - -
4 0 4 bd - -
5 0 5 be - -
6 1 1 - ca -
7 1 2 - cb -
8 1 3 - cc -
9 1 4 - cd -
10 1 5 - ce -
11 2 1 - - da
12 2 2 - - db
13 2 3 - - dc
14 2 4 - - dd
15 2 5 - - de
- should be an empty field.
SELECT A.id, A.type, A.t_id, B.b, NULL AS c, NULL AS d
FROM A JOIN B ON A.t_id = b.id
WHERE A.type = 0
UNION ALL
SELECT A.id, A.type, A.t_id, NULL, C.c, NULL
FROM A JOIN C ON A.t_id = c.id
WHERE A.type = 1
UNION ALL
SELECT A.id, A.type, A.t_id, NULL, NULL, D.d
FROM A JOIN D ON A.t_id = d.id
WHERE A.type = 2;
SELECT a.*,
CASE WHEN a.type = 0 THEN b.b ELSE NULL END b,
CASE WHEN a.type = 1 THEN c.c ELSE NULL END c,
CASE WHEN a.type = 2 THEN d.d ELSE NULL END d
FROM tableA a
LEFT JOIN tableB b
ON a.t_id = b.id
LEFT JOIN tableC c
ON a.t_id = c.id
LEFT JOIN tableD d
ON a.t_ID = d.id