首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何避免多次连接同一个表

如何避免多次连接同一个表
EN

Stack Overflow用户
提问于 2020-03-09 21:38:40
回答 2查看 49关注 0票数 0

在简化的示例中:想法是将所有(球员、教练和裁判)的名字放入最终的查询中,但我能想到的唯一方法是在各自的id上加入3次。什么是更好的方法?

团队

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...|Coachid | Playerid | Refid|
    --------------------------
...|   98    |  23    |  77    |

名字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Id    | Name      |
--------------------
  98  |  Andy     |
  23  |  Charlie  |
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT [t].[Id],
       [t].[TeamName],
       [c].[Name] AS CoachName,
       [p].[Name] AS PlayeName,
       [r].[Name] as RefName
FROM Team [t]
JOIN Name [c]
ON c.id = t.Coachid
JOIN Name [p]
ON p.id = t.PlayerId
JOIN Name [r] 
ON r.id = t.RefId
EN

回答 2

Stack Overflow用户

发布于 2020-03-09 21:50:00

正如已经评论的那样,您的方法是处理您的案例的最佳方式,并且应该具有良好的性能。

替代方案包括:

1)一系列相关子查询-这是可以的,因为每个关系只返回一个值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    t.Id,
   t.TeamName,
   (SELECT n.Name FROM AS Name n WHERE n.id = t.CoachId) CoachName,
   (SELECT n.Name FROM AS Name n WHERE n.id = t.PlayerId) PlayerName,
   (SELECT n.Name FROM AS Name n WHERE n.id = t.RefId) RefName
FROM Team t 

2)条件聚合-使查询更加繁琐:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    t.Id,
    t.TeamName,
    MAX(CASE WHEN n.id = t.CoachId THEN n.Name END) CoachName,
    MAX(CASE WHEN n.id = t.PlayerId THEN n.Name END) PlayerName,
    MAX(CASE WHEN n.id = t.RefId THEN n.Name END) RefName
FROM Team t
INNER JOIN Name n ON n.id IN (t.CoachId, t.PlayerId, t.RefId)
GROUP BY t.Id, t.TeamName
票数 0
EN

Stack Overflow用户

发布于 2020-03-09 21:41:55

根据表的结构方式,您提供的方式是完成此操作的最佳方式。

然而,奇怪的是,您构建团队表的方式。

您可以将整个查询简化为一个连接,如果您的Team表只包含每个人的id,而在Name表中,您将拥有该id的id和角色/职位。

我想这是一个很好的例子,说明了正确构建表格结构的重要性。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60608704

复制
相关文章
避免游标多次遍历
游标在数据库领域被广泛使用,尤其是对于需要将SQL语句返回的数据集进行逐行处理的时候。这为数据处理提供了极大的便利性,然游标的不当 使用从某种程度上而言会降低数据库的性能。下面的是一个来自生产环境的实际例子,由于使用了参数游标,所以引发了多次遍历。 一、源代码
Leshami
2018/08/14
8660
浅谈一下如何避免用户多次点击造成的多次请求
一、有效地在web客户端采用一定机制去防止重复点击提交,将大大减轻服务器端压力
江一铭
2022/06/16
1.6K0
小程序如何避免多次点击,重复触发事件
作为前端开发,我们经常会遇到的场景,比如用户点击获取验证码按钮时,没有反应,大部分用户都会接着点击,这就会造成用户收到多条验证码,这是因为后台api请求比较慢,而客户端体验又做得不到位,导致用户以为没点击到或者是页面假死,在上次请求还没处理完,就再次点击按钮。这对于我们开发来说,这是bug。
honey缘木鱼
2018/09/26
6.3K0
临时表tmp table如何避免
1、配置文件参数my.cnf tmp_table_size=64M max_heap_table_size=64M tmpdir = /data/mysql/tmp 2、优化Tips: 如果Created_tmp_disk_tables/ Created_tmp_tables应该小于20%,如果比值较高,就需要适当调高tmp_table_size或者max_heap_table_size的值,让Mysql在内存中完成临时表的操作,减少使用硬盘对性能和响应时长的影响。 在调高tmp_table_size或者m
MySQL轻松学
2018/03/09
3.6K0
Java编码指南:嵌套对象属性获取多次判断Null如何避免
groovy语言的安全导航操作符(The Safe Navigation operator)
崔认知
2023/06/19
5670
Java编码指南:嵌套对象属性获取多次判断Null如何避免
Android按钮防抖动,避免发送多次请求
Android按钮防抖动 Util代码(复制即用) 使用用例 Util代码(复制即用) package top.gaojc.util; public class ButtonClickUtils { private static long lastClickTime;//记录最近一次点击时间 private static long interval = 1000;//间隔为1秒 private static int lastButtonId;//存放最近一次传入的按钮id /
是阿超
2022/06/12
1.5K0
算法训练和模型部署如何避免多次重写数据预处理代码
前段时间,我们对接算法的工程师哭丧的和我说,模型生成后一般都要部署成API的形态对外提供服务,但是算法工程师并没有提供如何将一条数据转化特征向量的方法,他能拿到的是代码逻辑以及一些“中间元数据”。数据预处理本来就复杂,翻译也是一件极其困难的事情。我解释了这件事情难以解决的原因,但是显然他还是有些失望。
用户1332428
2018/07/30
7640
算法训练和模型部署如何避免多次重写数据预处理代码
前段时间,我们对接算法的工程师哭丧的和我说,模型生成后一般都要部署成API的形态对外提供服务,但是算法工程师并没有提供如何将一条数据转化特征向量的方法,他能拿到的是代码逻辑以及一些“中间元数据”。数据预处理本来就复杂,翻译也是一件极其困难的事情。我解释了这件事情难以解决的原因,但是显然他还是有些失望。
用户2936994
2018/08/27
1K0
Linux应用编程之多次打开同一个文件
同一个文件可以被多次打开,譬如在一个进程中多次打开同一个文件、在多个不同的进程中打开同一个文件。
233333
2022/09/21
7480
解决Vue多次点击同一个路由的Uncaught (in promise)问题
在升级了Vue-Router版本到到3.1.0及以上之后,多次点击同一个路由控制台会报Uncaught(in promise)的问题
水煮麥楽雞
2022/11/20
6510
解决Vue多次点击同一个路由的Uncaught (in promise)问题
Mysql避免全表update
在测试的时候忘记写where条件导致全表更新的话,可以收拾包袱走人了 下面这条语句可以开启检查,当没有加where时拦截下来 set sql_safe_updates=1; 关闭: set sql_safe_updates=0;
DH镔
2019/12/20
2.7K0
[C# 开发技巧]如何防止程序多次运行
最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c03-ab25-d03544f5fcc9, 所以这里就记录下来,希望给遇到同样问题的朋友有所参考的,同时也是对自己的一个积累。在介绍具体实现代码之前,我们必须明确解决这个问题的思路是什么的?下面只要分享我的一个思考的这个问题的方式:
乔达摩@嘿
2020/09/11
1.9K0
[C# 开发技巧]如何防止程序多次运行
Postgresql如何授权未来会创建的表(避免反复授权)
使用PG时经常有一类需求,某一个数据库的所有表都需要给某一个用户读权限,不管是已经创建的还是没有创建的。下面我们看下如何实现。
mingjie
2022/05/12
1.4K0
【MySQL】说透锁机制(三)行锁升表锁如何避免? 锁表了如何排查?
在上文我们曾小小的提到过,在索引失效的情况下,MySQL会把所有聚集索引记录和间隙都锁上,我们称之为锁表,或叫行锁升表锁.
天罡gg
2022/12/29
2.7K0
【MySQL】说透锁机制(三)行锁升表锁如何避免? 锁表了如何排查?
索引扫描时,对同一个叶子块访问多次的原因初探
观察索引扫描会按何种次序进行索引块的访问时,我发现了一种现象,即会有部分叶子块被访问两次或更多。以下是我自己对这种现象的重现,以及对产生该现象原因的初步判断。但截至目前,我并未找到有官方文档对相关内容的介绍。因此,如果大家有不同的看法,或者可以提供相关的官方文档介绍,也欢迎在文末留言区指正、讨论和提供。
数据和云
2021/05/08
8370
十三、表连接
表连接(JOIN)是在多个表中间通过一定的连接条件,使表之间发生关联进而能从多个表之间获取数据。简单的表连接语法如下:
喵叔
2021/06/25
8560
十三、表连接
Oracle表连接
  内连接:查询满足条件的结果集,是相对于外连接来说的(条件的话由很多种可以等于、不等于、大于、小于等等)。
翎野君
2023/05/12
7270
如何避免FOUC
FOUC即无样式内容闪烁也可以称为文档样式短暂失效,主要就是指HTML已加载而样式表并未加载,此后样式表再加载而产生的闪烁现象。
WindRunnerMax
2020/08/27
1.1K0
如何避免「脸红」
我是一个特别容易脸红的,对于女生来说脸红其实可以当腮红,看起来还超可爱,但是我是一个大男人呢,估计我是一个人见人怕,佛听了都哆嗦,非常在意别人的意见和看法,以及追求点小完美的处女座吧。
叉叉敌
2019/02/23
1.3K0
如何避免「脸红」
如何使用python连接MySQL表的列值?
MySQL 是一个开源关系数据库管理系统,广泛用于存储、管理和组织数据。使用 MySQL 表时,通常需要将多个列值组合成一个字符串以进行报告和分析。Python是一种高级编程语言,提供了多个库,可以连接到MySQL数据库和执行SQL查询。
很酷的站长
2023/08/11
2720
如何使用python连接MySQL表的列值?

相似问题

避免多次连接同一个表

10

如何避免在查询中多次连接同一个表?

21

如何多次连接同一个表

21

SQL:如何多次连接同一个表?

10

MySQL:如何多次连接同一个表?

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文