業務表與歷史表、分庫分表、異構系統同步查詢,表結構相同或相容,無外鍵關聯,需合併結果集。
(SELECT name, sex, age FROM user WHERE name LIKE '王%') UNION ALL (SELECT name, sex, age FROM user_history WHERE name LIKE '王%');
UNION ALL:保留重複行,效能優於 UNION(去重需排序)SELECT 欄位數、順序、型別必須一致ORDER BY/LIMITSELECT * FROM ( (SELECT name, sex, age FROM user WHERE name LIKE '王%') UNION ALL (SELECT name, sex, age FROM user_history WHERE name LIKE '王%') ) AS combined ORDER BY age DESC LIMIT 0, 50;
SELECT 'current' AS src, name, sex, age FROM user WHERE name LIKE '王%' UNION ALL SELECT 'history' AS src, name, sex, age FROM user_history WHERE name LIKE '王%';
SELECT src, COUNT(*), AVG(age) FROM ( SELECT 'current' AS src, age FROM user WHERE name LIKE '王%' UNION ALL SELECT 'history' AS src, age FROM user_history WHERE name LIKE '王%' ) t GROUP BY src;
WHERE 條件命中LIMIT 再 UNION ALL,減少網路傳輸UNION ALL 結果排序,考慮應用層合併或 ClickHouse/ES| 特性 | UNION | UNION ALL |
|---|---|---|
| 去重 | 是 | 否 |
| 效能 | 需排序/哈希去重 | 單純合併,極快 |
| 適用 | 業務要求唯一 | 日誌、歷史、明細保留重複 |
掌握 UNION ALL 模式,輕鬆應對「多表無關聯合併查詢」常見需求。