我的sql语句有什么问题,它说问题就在FULL JOIN附近,但我很难过:
SELECT `o`.`name` AS `offername`, `m`.`name` AS `merchantName`
FROM `offer` AS `o`
FULL JOIN `offerorder` AS `of` ON of.offerId = o.id
INNER JOIN `merchant` AS `m` ON o.merchantId = m.id
GROUP BY `of`.`merchantId`
请温柔,因为我不是sql fundi
答案 0 :(得分:3)
MySQL不提供完全加入,您可以使用
查询也非常错误,因为你有一个GROUP BY,但你的SELECT列不是聚合。
将此正确转换为LEFT + RIGHT + UNION之后,您仍然存在从每个不同of.merchantid
的任意随机记录中获取商品名称和商家名称的问题,甚至不一定来自同一记录。
因为你对o.merchant有一个INNER JOIN条件,所以不需要FULL JOIN,因为"offerorder"
中没有匹配的"offer"
记录将失败INNER JOIN。这将它变成LEFT JOIN(可选)。由于您要对of.merchantid
进行分组,因此任何丢失的offerorder
条记录都会在“NULL”下组合在一起作为商家。
这是一个可行的查询,对于每个商家,它只会显示商家制作的一个商品(按字典顺序排序时具有名字的商品)。
SELECT MIN(o.name) AS offername, m.name AS merchantName
FROM offer AS o
LEFT JOIN offerorder AS `of` ON `of`.offerId = o.id
INNER JOIN merchant AS m ON o.merchantId = m.id
GROUP BY `of`.merchantId, m.name
注意:加入o.merchantid = m.id
非常可疑。你是说of.merchantid = m.id
吗?如果是这种情况,请将LEFT更改为RIGHT join。