在两个表上使用LEFT Joins时遇到问题

时间:2012-03-09 22:13:07

标签: mysql sql

我有三张桌子。门票,门票历史和分类。我想算一下员工已经完成了多少票,但按分类细分了。

例如,员工A处理了3张票。前两张票被归类为错误,最后一张是特色。我想查询数据库并选择员工更改故障单状态的所有故障单。

这样的事情:

Bug ..... 2

特征...... 1

UI ..... 0

请求..... 0

现在,我能得到的就是:

Bug ..... 2

特征...... 1

使用此查询:

SELECT c.id, c.description, count(c.id)
FROM classification c
LEFT JOIN ticket t on t.classification_id = c.id
LEFT JOIN ticket_history th on th.ticket_num = t.id 
WHERE th.employee = '456'
AND th.from_state = '2' AND th.to_state = '3'
GROUP BY c.id
ORDER BY c.id

我创建了一个SQL Fiddle with sample data,但还没有设法找到解决方案。

1 个答案:

答案 0 :(得分:3)

第一个问题是,classification表中的所有行都不会被选中,而只会选择其他两个表中具有相应条目的行。那是因为您已经在WHERE子句中放置了一些依赖于这些表中的条目的条件。基本上,你正在进行LEFT JOIN以解决这个问题,但是通过将条件放在WHERE而不是LEFT JOIN ... ON中来破坏这个问题。

第二个问题是,当你真正想要门票的数量时,你计算分类的数量,对吧?因此,将count(c.id)更改为count(t.id)以获得正确的数字。

SELECT c.id, c.description, count(t.id)
FROM classification c
LEFT JOIN ticket t on t.classification_id = c.id
LEFT JOIN ticket_history th on th.ticket_num = t.id
AND th.employee = '456'
AND th.from_state = '2' AND th.to_state = '3'
GROUP BY c.id
ORDER BY c.id;