数据库
首页 > 数据库> > MySQL语句(FULL JOIN上的语法错误)

MySQL语句(FULL JOIN上的语法错误)

作者:互联网

我的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后,仍然存在从每个商户的任意随机记录中获取要约名称和商人名称的问题,甚至不一定从同一记录中获取要约名称和商人名称.

因为您对o.merchant有INNER JOIN条件,所以不需要FULL JOIN,因为“ offer”中没有匹配的“ offerorder”记录将使INNER JOIN失败.它将变成左联接(可选).因为您是按.merchantid分组,所以所有缺少的报价单记录都将在“ NULL”下分组为商人标识.

对于每个商人ID,这是一个查询,它将仅显示该商人提出的一个要约(按字典顺序排序时具有名字的一个要约).

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.您的意思是.merchantid = m.id吗?如果是这种情况,请将LEFT更改为RIGHT连接.

标签:mysql-error-1064,sql,mysql
来源: https://codeday.me/bug/20191208/2094040.html