Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 计数(*)中不考虑左连接条件_Mysql_Sql - Fatal编程技术网

Mysql 计数(*)中不考虑左连接条件

Mysql 计数(*)中不考虑左连接条件,mysql,sql,Mysql,Sql,我将描述(希望是所有)重要的方面: 我有一张桌子,里面有所有的票,这些票可以贴上标签。关系是M:N,中间的表是sup_labels2tickets 如果没有票务显示的标签,我想获得表中每个相应标签的所有票务计数sup_tickets。不要忽略第二个图像上显示的输出 标签也分配给特定队列,票证也分配给特定队列,但有时票证所在的标签与票证本身不在同一队列中 我提出了这两个查询,第一个查询中的问题是2nd LEFT JOIN不尊重t.queue\u id=@queue\u id,如果票证位于与相应标签

我将描述(希望是所有)重要的方面:

我有一张桌子,里面有所有的票,这些票可以贴上标签。关系是
M:N
,中间的表是
sup_labels2tickets

如果没有票务显示的标签,我想获得表中每个相应标签的所有票务计数
sup_tickets
。不要忽略第二个图像上显示的输出

标签也分配给特定队列,票证也分配给特定队列,但有时票证所在的标签与票证本身不在同一队列中

我提出了这两个查询,第一个查询中的问题是
2nd LEFT JOIN
不尊重
t.queue\u id=@queue\u 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\u id=@queue\u 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

你知道这可能是什么,或者我应该如何正确地做到这一点吗


另外,我刚刚注意到,在第一次查询中,t.state对
count(*)

尝试将
SELECT count(l2t.id)
更改为
SELECT count(t.id)
,如果要查看从外部联接表成功返回的记录数,需要查询a(非空)该表中的数据项。

这样:

SELECT COUNT(t.id) AS `count`, l.name, l.id 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\u id=@queue\u id
打开
条件移动到
WHERE
子句有效地将
左连接
更改为普通的
连接
(因为它强制
t.queue\u id
不为空)@joop我不知道它是否相关,但是除了
l2t.ticket\u id
=33或34的记录外,所有
票据都设置了队列id(不为空);这些在表
sup\u tickets
@joop中根本不存在。这是真的,你有什么建议吗。我看不清答案。