mysql-union统计数量和分页查询

说明:
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
复制代码
 

统计数量

select sum(a.b) as num from (
select count() as b from table_1
union all
select count() as b from table_2
) as a(注意这里要取个别名)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a...Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值