MariaDB / MySQL 合并两个表
MariaDB / MySQL Combine two tables
我有 2 个表 tnHeaders 和 tnData
tn标题
fnIDX
fnDESCRIPTION
1
h1
2
h2
3
h3
tn数据
fnIDX
fnHEADER_IDX
fnDESCRIPTION
1
1
d1
2
1
d2
3
1
d3
4
2
d4
5
2
d5
6
2
d6
7
3
d7
8
3
d8
9
3
d9
并希望生成此输出
fnOUTPUT
h1
d1
d2
d3
h2
d4
d5
d6
h3
d7
d8
d9
我可以在代码中做到这一点没问题,但我如何才能在 SQL 中做到这一点? (使服务器正常工作)
您需要使用 UNION ALL
来描述两个表,并以 headers 位于其数据之上的方式对结果进行排序:
SELECT fnOUTPUT
FROM (
SELECT fnDESCRIPTION fnOUTPUT, fnIDX header_index, 1 is_header FROM tnHeaders
UNION ALL
SELECT fnDESCRIPTION, fnHEADER_IDX, 0 FROM tnData
) t
ORDER BY header_index, is_header DESC, fnOUTPUT;
参见demo。
我有 2 个表 tnHeaders 和 tnData
tn标题
fnIDX | fnDESCRIPTION |
---|---|
1 | h1 |
2 | h2 |
3 | h3 |
tn数据
fnIDX | fnHEADER_IDX | fnDESCRIPTION |
---|---|---|
1 | 1 | d1 |
2 | 1 | d2 |
3 | 1 | d3 |
4 | 2 | d4 |
5 | 2 | d5 |
6 | 2 | d6 |
7 | 3 | d7 |
8 | 3 | d8 |
9 | 3 | d9 |
并希望生成此输出
fnOUTPUT |
---|
h1 |
d1 |
d2 |
d3 |
h2 |
d4 |
d5 |
d6 |
h3 |
d7 |
d8 |
d9 |
我可以在代码中做到这一点没问题,但我如何才能在 SQL 中做到这一点? (使服务器正常工作)
您需要使用 UNION ALL
来描述两个表,并以 headers 位于其数据之上的方式对结果进行排序:
SELECT fnOUTPUT
FROM (
SELECT fnDESCRIPTION fnOUTPUT, fnIDX header_index, 1 is_header FROM tnHeaders
UNION ALL
SELECT fnDESCRIPTION, fnHEADER_IDX, 0 FROM tnData
) t
ORDER BY header_index, is_header DESC, fnOUTPUT;
参见demo。