当前位置: 首页 > 面试题库 >

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

夹谷鸿福
2023-03-14
问题内容

我的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拥有INNER JOIN条件,因此不需要FULL
JOIN,因为"offerorder"没有匹配项的记录"offer"将使INNER JOIN失败。这就变成了LEFT
JOIN(可选)。由于您要分组of.merchantid,因此所有缺少的offerorder记录都将在“ NULL”下作为商人ID分组在一起。

对于每个商人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非常可疑。是你的意思of.merchantid = m.id吗?如果是这种情况,请将LEFT更改为RIGHT连接。



 类似资料:
  • 问题内容: 我正在尝试在Go中执行MERGE语句: 但是我得到了这个错误: 在MySQL中也是如此: 怎么了? 问题答案: 不支持,等效的是 插入…在重复的密钥更新上 尝试这个, 但请确保将其设置为或。

  • SQL查询: 这是一个旧文件,我试图通过phpMyAdmin在HostGator上运行。我收到一个错误,上面写着: MySQL说:#1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以在第5行的“)ENGINE=MyISAM”附近使用正确的语法 更新:如果我将语句更改为this,我仍然会收到错误: 我得到错误: 错误1064 (42000):您的SQL语法有错误;检查与您的

  • 目前遇到此语法错误,错误发布在代码下方。 上面的代码,无法找出if语句上的语法错误。错误消息将很快粘贴为注释

  • 问题内容: 为什么Python在第9行的简单语句中给我一个语法错误? Python的版本是: 问题答案: 在Python 3中,print是一个函数,您需要像这样调用它。

  • 问题内容: 我使用准备好的语句编写了select语句。每次尝试运行它都会出现此错误。我如何克服这个错误?我的jdbc连接器是mysql-connector- java-5.1.13-bin.jar。我的代码: 错误代码.. 2013年10月1日,下午1:23:23 sanin.lands.model.View_ads_cls getAdDetail 问题答案: 错误在这一行 这样做

  • 我的SQL语句语法有问题,LogCat说问题就在哪里。我哪里错了? 下面是我的代码: 任何帮助或建议都将欣然接受,这是我的项目的最后一块拼图。当我做完这件事我就可以Rest了。提前道谢。