左联接多行

时间:2019-11-02 20:44:01

标签: sql join left-join

我有下表:

Tables

我想加入两个表,以便我可以在农场表上列出每个农场,同时在农产品表上列出每个产品,但是我不确定如何列出。这是到目前为止我得到的:

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

2 个答案:

答案 0 :(得分:1)

SELECT p.*
FROM produce p
inner join farms f on p.farm_id = f.id
在您的php提取代码中,

就是这样,

$row["farm_name"];

它将在每个农产品行返回农场名称。

答案 1 :(得分:1)

SQL标准的旧版本(SQL-92和更早版本)不允许使用SELECT HAVINGORDER BY子句进行查询是指未汇总GROUP BY子句中未命名的列。如果回头看原始查询,您会发现您的查询确实符合那些标准所不允许的。

SELECT p.*, f.farm_name, f.county
...
GROUP BY f.id

“非聚合列”是指未使用诸如sum()count()avg()等聚合函数的任何列

要使您的查询符合那些标准,将在group by子句中指定select下列出的每一列,而不仅是其中之一。 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