首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL和聚合中的表连接问题

MySQL和聚合中的表连接问题
EN

Stack Overflow用户
提问于 2008-12-12 21:41:48
回答 5查看 632关注 0票数 1

我有三张桌子。此查询将写下正确的答案(使用适当的btv.cas和race.id_zavod表示btv.id_user的x线

代码语言:javascript
运行
复制
SELECT `btv.id_user`, `btv.id_zavod`,`btv.cas`
FROM `btv`
JOIN `btu` ON `btv.id_user` = `btu.id_user`
JOIN `race` ON 'btv.id_zavod' = `race.id_zavod`
WHERE `race.type` = '8' AND `btv.id_user` = '607'

结果:

代码语言:javascript
运行
复制
| 607 |  512 | 03:15:58 |  
| 607 |  730 | 03:01:18 |  
| 607 |  164 | 03:07:26 |  
| 607 |  767 | 02:58:31 |  
| 607 | 1147 | 03:06:47 |  
| 607 | 1149 | 03:09:41 |  
| 607 | 1178 | 03:24:20 | 

但是,当我尝试通过id_user将其聚合到一行时,它返回正确的min btv.cas,但返回错误的join错误的race.id_zavod

代码语言:javascript
运行
复制
SELECT `btv.id_user`, `btv.id_zavod`, MIN( `btv.cas` )
FROM `btv`
JOIN `btu` ON `btv.id_user` = `btu.id_user`
JOIN `race` ON 'btv.id_zavod' = `race.id_zavod`
WHERE `race.type` = '8' AND `btv.id_user` = '607'
GROUP BY `btv.id_user`

结果:

代码语言:javascript
运行
复制
| 607 | 512 | 02:58:31 |
EN

Stack Overflow用户

回答已采纳

发布于 2008-12-12 22:08:43

使用GROUP BY时,select-list中的列必须满足以下条件之一:

在GROUP BY中命名

  • 列(例如,example)
  • Column中的btv.id_user位于聚合函数(例如MIN( btv.cas ) )中)
  • 列是您在GROUP BY中命名的列的函数依赖项。

这是查询中的错误:对于btv.id_user的每个值,btv.id_zavod都有很多值。这不满足函数依赖。id_user的每个值在id_zavod中必须只有一个值,才能成为函数依赖。

在一些数据库品牌中,这个查询实际上会给你一个错误。MySQL更灵活,它信任您只命名选择列表中的列,这些列是您在GROUP BY中命名的列的函数依赖项。

下面的查询将返回您想要的内容,即每个id_userbtv.cas的最小值,以及相应的btv.id_zavod

代码语言:javascript
运行
复制
SELECT b1.id_user, b1.id_zavod, b1.cas
FROM btv AS b1
 JOIN btu ON (b1.id_user = btu.id_user)
 JOIN race ON (b1.id_zavod = race.id_zavod)
 LEFT OUTER JOIN btv AS b2 ON (b1.id_user = bt2.id_user AND 
   (b1.cas > b2.cas OR (b1.cas = b2.cas AND b1.primarykey > b2.primarykey))
WHERE race.type = '8' AND b1.id_user = '607'
 AND b2.id_user IS NULL;

换句话说,您需要像以前一样执行联接,但随后将其再次联接到btv,以查看是否有另一行具有相同的id_user值,但cas中的值更小。使用外部联接,因为您正在寻找没有匹配的情况。您可以使用b2.id_user IS NULL进行测试,因为当没有匹配时,外部联接会使所有列都为NULL。

请注意,可能会有平局,因此我们使用主键作为决胜局添加了额外的术语。

您不需要在此查询中使用GROUP BY。这是隐式处理的,因为只有一行满足外部连接条件。

票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/364230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档