我有下表:
我想加入两个表,以便我可以在农场表上列出每个农场,同时在农产品表上列出每个产品,但是我不确定如何列出。这是到目前为止我得到的:
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
答案 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
HAVING
或ORDER 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