我将描述(希望是所有)重要的部分:
我有一个表sup_tickets
,其中包含所有门票,并且可以对这些门票
进行标记。关系为 M:N
,中间表为 sup_labels2tickets
。
如果票证没有标签显示 0,我想获取表 sup_tickets
中每个相应 label
的所有票证计数。不要省略输出如第二张图片所示。
标签也分配给特定的队列,工单也分配给特定的队列,但有时工单所在的标签与工单本身不在同一队列中。
我提出了这两个查询,第一个查询中的问题是2nd LEFT JOIN
不尊重t.queue_id = @queue_id
并且它返回不准确的结果,如果票证与相应标签位于不同的队列中。
第一个几乎可以工作:
SELECT COUNT(l2t.id) AS `count`, l.name, l.id, l.priority FROM sup_labels AS l
LEFT JOIN sup_labels2tickets AS l2t ON l.id = l2t.label_id
LEFT JOIN sup_tickets as t ON t.id = l2t.ticket_id AND t.queue_id = @queue_id AND t.state = @state
WHERE l.queue_id = @queue_id
GROUP BY l.id
它产生这样的结果:
但是,如果我将 t.queue_id = @queue_id
移出到 WHERE 语句,它会忽略计数为 0 的标签。
SELECT COUNT(l2t.id) AS `count`, l.name, l.id, l.priority FROM sup_labels AS l
LEFT JOIN sup_labels2tickets AS l2t ON l.id = l2t.label_id
LEFT JOIN sup_tickets as t ON t.id = l2t.ticket_id AND t.state = @state
WHERE l.queue_id = @queue_id AND t.queue_id = @queue_id
GROUP BY l.id
知道这可能是什么或者我应该如何正确地执行此操作?
ps。我刚刚注意到 t.state 也不尊重 count(*)
最佳答案
如果您想查看成功返回的记录数,请尝试将第一个查询中的 SELECT COUNT(l2t.id)
更改为 SELECT COUNT(t.id)
从外部连接表中,您需要从该表查询(非空)数据项。
关于mysql - COUNT(*) 中不遵守 LEFT JOIN 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28051306/