我的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
最佳答案
MySQL 不提供完全连接,您可以使用
- 一对 LEFT+RIGHT 和 UNION;或
- 使用 LEFT、RIGHT、INNER 和 UNION ALL 的三元组
查询也是非常错误的,因为你有一个 GROUP BY 但你的 SELECT 列不是聚合。
将其正确转换为 LEFT + RIGHT + UNION 后,您仍然会遇到从每个不同的 of.merchantid
的任意随机记录中获取报价名称和商家名称的问题,甚至不一定来自同一条记录。
因为您有针对 o.merchant 的内部联接条件,所以不需要完全联接,因为 "offerorder"
记录在 "offer"
中没有匹配项将失败内部联接。这将它变成一个 LEFT JOIN(可选)。因为您是在 of.merchantid
上分组,所以任何缺少的 offerorder
记录都将作为 merchantid 在“NULL”下分组在一起。
这是一个有效的查询,对于每个 merchantid,它将仅显示商家提供的一个报价(按字典顺序排序时具有名字的报价)。
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 连接。
关于sql - Mysql 语句(FULL JOIN 语法错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798698/