Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 SQL连接问题_Sql_Mysql_Join - Fatal编程技术网

Mysql SQL连接问题

Mysql SQL连接问题,sql,mysql,join,Sql,Mysql,Join,我试图找到所有交易信息以及他们收到的评论数量。我的问题 select deals.*, count(comments.comments_id) as counts from deals left join comments on comments.deal_id=deals.deal_id where cancelled='N' 但现在它只显示至少有一条评论的交易。有什么问题吗?尝试将左连接更改为右外部连接您错过了分组依据 select deals.*, count(

我试图找到所有交易信息以及他们收到的评论数量。我的问题

select deals.*,
       count(comments.comments_id) as counts
from deals 
left join comments on comments.deal_id=deals.deal_id 
    where cancelled='N'
但现在它只显示至少有一条评论的交易。有什么问题吗?

尝试将左连接更改为右外部连接

您错过了分组依据

select deals.*, count(comments.comments_id) as counts 
from deals 
left join comments on comments.deal_id=deals.deal_id 
where cancelled='N'
GROUP BY deals.deal_id

“取消”是评论栏吗?如果是,,您需要从deals left join comments ON comments.deal\u id=deals.deal\u id AND comments.cancelled='N'将cancelled='N'从WHERE子句移动到ON子句,或者从deals left join的内联视图中执行筛选,从comments WHERE cancelled='N'comments.deal\u id=deals.deal\u id的注释中选择*,因为在WHERE子句中对其进行筛选将删除取消为null的所有行。

左联接不能是内部联接。它总是在外面工作。谢谢。但是为什么需要groupbyaggregate函数count在本例中应用于一个组。该组在GROUPBY子句中定义。据我所知,标准SQL要求SELECT中的所有未聚合列都显示在GROUP BY中。在您的情况下,您需要添加GROUP BY deals.DEALE_id、deals.field2,。。。然而,Mysql扩展忽略了这一要求,在某些情况下这是有充分理由的。如果使用不同的SQL server,您可能会得到一个错误,而不是意外的结果。group by会将计数聚合到每笔交易中,否则您将得到一个总计,因为此查询仍然依赖于group by中MySQL的隐藏列:您成为MySQL关于group by子句的非标准功能的牺牲品-任何其他数据库都会告诉您使用了group by子句语法不正确: