說明:
UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。 請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的列的順序必須相同。否則會報錯。 union和 union all的關系和區別: 1.UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出所有的值。 2.即 :union會對合並的兩個或多個查詢的結果集 進行 去重合並的操作。 union all則不會去重,只做合並,因此查出的結果集中 會有重復的記錄。
示例:
分頁查詢sql
( SELECT DISTINCT c.u_id, c.create_time FROM 表A a LEFT JOIN 表B b ON b.u_id = a.u_id AND b.yn = 1
LEFT JOIN 表C c ON c.u_id = a.u_id AND c.yn = 1
LEFT JOIN 表D d ON d.u_id = a.u_id AND d.yn = 1
WHERE
1 = 1
AND a.yn = 1
AND b.vender_id IN ( 1 ) AND b.join_behavior = 1
AND b.store_join_type = 1 ) UNION ( SELECT DISTINCT c.u_id, c.create_time FROM 表A a LEFT JOIN 表B b ON b.u_id = a.u_id LEFT JOIN 表C c ON c.u_id = a.u_id LEFT JOIN 表D d ON d.u_id = a.u_id WHERE
1 = 1
AND a.yn = 1
AND b.vender_id IN ( 1 ) AND b.join_behavior = 1
AND a.join_value IN ( 6 ) AND b.store_join_type = 2 ) ORDER BY create_time DESC LIMIT 0,200;
count統計sql:
select
COUNT(*) FROM ( ( SELECT DISTINCT c.u_id, c.create_time FROM 表A a LEFT JOIN 表B b ON b.u_id = a.u_id AND b.yn = 1
LEFT JOIN 表C c ON c.u_id = a.u_id AND c.yn = 1
LEFT JOIN 表D d ON d.u_id = a.u_id AND d.yn = 1
WHERE
1 = 1
AND a.yn = 1
AND b.vender_id IN ( 1 ) AND b.join_behavior = 1
AND b.store_join_type = 1 ) UNION ( SELECT DISTINCT c.u_id, c.create_time FROM 表A a LEFT JOIN 表B b ON b.u_id = a.u_id AND b.yn = 1
LEFT JOIN 表C c ON c.u_id = a.u_id AND c.yn = 1
LEFT JOIN 表D d ON d.u_id = a.u_id AND d.yn = 1
WHERE
1 = 1
AND a.yn = 1
AND b.vender_id IN ( 1 ) AND b.join_behavior = 1
AND a.join_value IN ( 6 ) AND b.store_join_type = 2 ) ) AS temp