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左连接计数不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Java MySQL连接不起作用:找不到合适的驱动程序[重复]