我的 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 基础者
MySQL不提供完整连接,您可以使用
- 一对 LEFT+RIGHT 和 UNION;或者
- 使用 LEFT、RIGHT 和 INNER 的三元组以及 UNION ALL
该查询也是非常错误的,因为您有一个 GROUP BY 但您的 SELECT 列不是聚合。
将其正确转换为 LEFT + RIGHT + UNION 后,您仍然会遇到从每个不同的随机记录中获取报价名称和商家名称的问题of.merchantid
,甚至不一定来自同一条记录。
因为您有针对 o.merchant 的 INNER JOIN 条件,所以不需要 FULL JOIN,因为"offerorder"
没有匹配的记录"offer"
将使 INNER JOIN 失败。这会将其变成 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 连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)