Да предположим, че имате две таблици, които искате да UNION
CREATE TABLE Table1
(`id` int, `name` varchar(32));
CREATE TABLE Table2
(`id` int, `name` varchar(32));
И примерни данни
таблица 1:
<пред>| ID | ИМЕ ||----|-------|| 1 | име1 || 2 | име2 || 3 | име3 |таблица 2:
<пред>| ID | ИМЕ ||----|--------|| 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
Изход:
<пред>| ID | ИМЕ ||----|--------|| 1 | име1 || 2 | име2 || 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
Изход:
<пред>| ID | ИМЕ ||----|--------|| 1 | име1 || 2 | име2 || 3 | име3 || 11 | име11 || 22 | име22 || 33 | име33 |Ето SQLPiddle демонстрация