sql - Mysql 语句(FULL JOIN 语法错误)

标签 sql mysql mysql-error-1064

我的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/

相关文章:

php - 连接和空值行未显示

mysql - UNION All,Group BY 然后得到整体 COUNT

MySQL:连接后计算重复项而不进行过滤/分组

mysql - 如何在mysql中获得不同的结果?

mysql - SQL SELECT 语句 MAX 日期和表连接

mysql - GROUP by 和 WHERE 不能一起工作

mysql - 获取Mysql中 super 父级的所有子级id

mysql - 计算集合的密度

mysql - 从存储过程调用 DROP USER,如何扩展输入参数

php - 这个php脚本有什么问题?