MySQL左连接计数不起作用

Posted

技术标签:

【中文标题】MySQL左连接计数不起作用【英文标题】:MySQL Left Join Count Not working 【发布时间】:2012-12-20 03:32:20 【问题描述】:

我有 2 张桌子(成员,duty_sched) 我希望能够计算每个成员出现在 duty_sched 表中的次数。 这是我经过几周搜索后得到的

SELECT 
members.fname, 
members.lname, 
(SELECT COUNT(duty_sched.id) FROM duty_sched
 WHERE 'duty_sched.mbr_id' = 'members.mbr_id') AS shifts 

FROM members
ORDER BY members.lname, members.fname

我得到的输出全为零,我希望它显示给我的是:

改名 鲍勃·史密斯 4 简·约翰逊 2

我能得到的任何帮助将不胜感激。

【问题讨论】:

嗨,我在我拥有的转储表上尝试了您的查询。你的结构是正确的。尝试 count(*) 并检查您的 where 条件。 【参考方案1】:

去掉单引号:WHERE duty_sched.mbr_id = members.mbr_id)

您也可以使用LEFT JOIN 编写查询:

SELECT 
    m.fname, 
    m.lname, 
    COUNT(d.id) AS shifts 
FROM members AS m
  LEFT JOIN duty_sched AS d
    ON d.mbr_id = m.mbr_id
GROUP BY
    m.mbr_id                     -- the Primary Key of `members`
ORDER BY 
    m.lname, m.fname ;

【讨论】:

mbr_id是由各种列信息组成的VARCHAR,这有区别吗? 编辑,你的问题,添加SHOW CREATE TABLE members的输出和真实数据,表格的几行。 我为两个表添加了一个 INT 列用于 ID 目的,一旦我加入了两个 INT 列,它就可以完美地工作。谢谢你所做的一切。【参考方案2】:

你可以试试这样的

SELECT 
members.fname, 
members.lname, 
count(*) FROM duty_sched JOIN members
WHERE duty_sched.mbr_id = members.mbr_id
Group by duty_sched.mbr_id
ORDER BY members.lname, members.fname

【讨论】:

【参考方案3】:

试试这个:

SELECT m.fname, m.lname, IFNULL(A.shifts, 0) shifts
FROM members m 
LEFT JOIN (SELECT mbr_id, COUNT(id) shifts 
           FROM duty_sched GROUP BY mbr_id)  A ON m.mbr_id = A.mbr_id 
ORDER BY m.lname, m.fname;

【讨论】:

以上是关于MySQL左连接计数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用左外连接时 Oracle 分区修剪不起作用

为啥默认约束在mysql中不起作用? [复制]

使用php pdo选择原始计数不起作用[重复]

Java MySQL连接不起作用:找不到合适的驱动程序[重复]

MySQL 连接器/python 在 django 中不起作用

mysql5 数据库连接丢失问题,autoReconnect=true不起作用