使用以下MySQL模式进行关系:
表user和PK user_id表blog与PK blog_id和FK user_id表tag与PK tag_id并将表blog_tag与PK和FK链接为blog_id和tag_id(均已删除级联)]
1]在带有Node(12.16.2),Express(4.17.1)和mysql(2.18.2)的Ubuntu 18.04.1上进行本地开发时,以下查询在使用mysql服务器5.7.30(如果是客户端14.14,则为14.14)时没有问题事项):
"SELECT b.*
, JSON_ARRAYAGG(JSON_OBJECT('id', t.tag_id, 'name', t.name, 'color', t.color)) AS tags
FROM blog b
JOIN blog_tag bt
ON bt.blog_id = b.blog_id
JOIN tag t
ON bt.tag_id = t.tag_id
WHERE b.blog_id = ?", [req.params.blog_id]
这是用于显示页面的页面,它在其中返回单个博客以及标记数组作为json对象。在本地工作正常。
针对生产数据库(Clever Cloud MySQL附加mysql服务器8.0.13)运行时,上面的show查询返回每列null的结果。为什么??
2)当使用上面的精确查询但将其更改为LEFT JOIN而不是JOIN时,在生产中效果很好。为什么JOIN可以在MySQL 5中工作,但不能在MySQL 8中工作?与JOIN相比,LEFT JOIN会产生什么影响而不破坏它?
希望它很清楚,感谢您的帮助。
GROUP BY
。因此,SELECT
中的所有值都应该是聚合函数的参数。如果有GROUP BY
,则未聚合的列将需要与GROUP BY
键兼容。但是,您有SELECT b.*
,因此很显然没有汇总许多列。这是SQL中的语法错误
问题是您有一个格式错误的查询,该查询曾经用于MySQL的默认设置,因为它允许此类格式错误的查询。幸运的是,该问题已在MySQL 8+中修复,因此该查询不起作用。