【发布时间】:2019-11-02 20:44:01
【问题描述】:
我有以下表格:
我想合并这两个表,这样我就可以将农场表上的每个农场与农产品表上的每个产品一起列出,但我不确定如何。这是我到目前为止所得到的:
SELECT p.*, f.farm_name, f.county
FROM produce p
LEFT JOIN farms f on p.farm_id = f.id
GROUP by f.id
ORDER BY f.farm_name
【问题讨论】:
我有以下表格:
我想合并这两个表,这样我就可以将农场表上的每个农场与农产品表上的每个产品一起列出,但我不确定如何。这是我到目前为止所得到的:
SELECT p.*, f.farm_name, f.county
FROM produce p
LEFT JOIN farms f on p.farm_id = f.id
GROUP by f.id
ORDER BY f.farm_name
【问题讨论】:
SELECT p.*
FROM produce p
inner join farms f on p.farm_id = f.id
在您的php 获取代码中这样做,
$row["farm_name"];
它将在每个农产品行中返回农场名称。
【讨论】:
以前版本的 SQL 标准(SQL-92 和更早版本)不允许使用 SELECT HAVING 或ORDER BY 子句的查询指的是未在GROUP BY 子句。如果您回顾您的原始查询,您会发现您的查询完全符合这些标准所不允许的。
SELECT p.*, f.farm_name, f.county
...
GROUP BY f.id
“非聚合列”是指任何不使用聚合函数的列,例如 sum() count() avg() 等
为了使您的查询符合这些标准, select 下列出的每一列都将在该 group by 子句中指定,而不仅仅是一个。 MySQL 有一个特性,它允许您运行不合规样式的分组查询。如果它通知您查询是不正确的语法,您可能会意识到 group by 在这里对您没有帮助。
这表明您正在使用 MySQL,并且您没有开启 SQL 模式 ONLY_FULL_GROUP_BY。
我敦促您避免这个 MySQL 弱点,打开 SQL 模式 ONLY_FULL_GROUP_BY。
见: https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html
【讨论】: