假设您有两个表要 UNION
CREATE TABLE Table1
(`id` int, `name` varchar(32));
CREATE TABLE Table2
(`id` int, `name` varchar(32));
Run Code Online (Sandbox Code Playgroud)
和样本数据
表格1:
| ID | NAME | | ---- | ------- | | 1 | 名称1 | | 2 | name2 | | 3 | 名称3 |
表2:
| ID | NAME | | ---- | -------- | | 11 | 名称11 | | 22 | 名称22 | | 33 | 名称33 | | 1 | 名称1 |
模仿 UNION ALL
SELECT COALESCE(t1.id, t2.id) id,
COALESCE(t1.name, t2.name) name
FROM
(
SELECT TABLE_NAME <> 'table1' n
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = SCHEMA()
AND TABLE_NAME IN('table1', 'table2')
) t LEFT JOIN table1 t1
ON t.n = 0 LEFT JOIN table2 t2
ON t.n = 1
Run Code Online (Sandbox Code Playgroud)
输出:
| ID | NAME | | ---- | -------- | | 1 | 名称1 | | 2 | name2 | | 3 | 名称3 | | 11 | 名称11 | | 22 | 名称22 | | 33 | 名称33 | | 1 | 名称1 |
要进行仿真,UNION您只需添加DISTINCT
SELECT DISTINCT COALESCE(t1.id, t2.id) id,
COALESCE(t1.name, t2.name) name
FROM
(
SELECT TABLE_NAME <> 'table1' n
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = SCHEMA()
AND TABLE_NAME IN('table1', 'table2')
) t LEFT JOIN table1 t1
ON t.n = 0 LEFT JOIN table2 t2
ON t.n = 1
Run Code Online (Sandbox Code Playgroud)
输出:
| ID | NAME | | ---- | -------- | | 1 | 名称1 | | 2 | name2 | | 3 | 名称3 | | 11 | 名称11 | | 22 | 名称22 | | 33 | 名称33 |
这是SQLFiddle演示