› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
anai1943
V2EX  ›  MySQL

mysql left join 多个 count 问题

  •  
  •   anai1943 · Apr 29, 2015 · 4873 views
    This topic created in 4190 days ago, the information mentioned may be changed or developed.

    SQL语句如下(#代表*)

    SELECT
    d.#,
    ld.#,
    count(ld.id) AS count_1,
    count(v.view_user_id) AS count_2
    FROM ly_sem_data AS d
    LEFT JOIN ly_data AS ld ON d.pc_key = ld.pc_key
    LEFT JOIN ly_vcard AS v ON ld.view_user_id = v.view_user_id
    WHERE
    d.pc_key != ''
    AND ld.pc_key != ''
    GROUP BY
    d.pc_key

    是这样的,用left join 链接两张表查询,统计后两张表的记录总数,用这种写法。查询出来的结果,count_1 和 count_2的值是一样的,实际数据这两个是不同的,怎么处理这种情况,多个count

    3 replies  •  2015-04-29 18:03:12 +08:00
    msg7086
        1
    msg7086  
       Apr 29, 2015
    看到这个帖子,我首先有这么些问题:
    1. 你的表结构是怎么样的?
    2. 你的目的是什么?
    3. 你期望的结果是多少?实际结果是多少?
    4. 你知道LEFT JOIN是怎么用的吗?
    5. 你知道GROUP是怎么用的吗?
    6. 你知道COUNT(COLUMN)是怎么用的吗?
    whiteblack
        2
    whiteblack  
       Apr 29, 2015
    那什么。。。这个执行的过程是先进行join连接,如果有多个join 则先进行前面一个,然后拿join的结果去执行后面的join,当所有join执行完毕后,然后拿着最后的结果集去select where ,所以你在select 里面count的都是“所有join执行完毕之后的结果集”,所以count的结果当然一样了
    anai1943
        3
    anai1943  
    OP
       Apr 29, 2015
    @xiaobaigsy 已经解决了,在第一个select里面加上一个select,这样写行么,测试效率还行。
    (
    SELECT
    COUNT(id)
    FROM
    ly_data
    WHERE
    ....
    ) AS count_1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   903 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:49 · PVG 06:49 · LAX 15:49 · JFK 18:49
    ♥ Do have faith in what you're doing.