首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Self Table Join上的SQL

Self Table Join上的SQL
EN

Stack Overflow用户
提问于 2019-06-24 14:58:34
回答 2查看 42关注 0票数 0

我正试着做一个简单的自连接SQL和一个连接到第二个表的连接,但无论如何我都搞不懂。我做了一些研究,似乎无法从类似的问题中找到答案。此查询针对在VB.NET中运行的MS-Access。

我有两张桌子:

代码语言:javascript
运行
AI代码解释
复制
TodaysTeams
-----------
TeamNum  PlayerName PlayerID
-------  ---------- --------
   1     Mark       100
   1     Brian      101
   2     Mike       102
   2     Mike       102

(请注意,上面的最后两行不是拼写错误。在这种情况下,玩家可以与自己配对以组成一支球队)

代码语言:javascript
运行
AI代码解释
复制
TodaysTeamsPoints
-----------------
TeamNum    Points
-------    ------
   1         90
   2         85

我想要的结果是(2行,每组1行):

代码语言:javascript
运行
AI代码解释
复制
TeamNum  PlayerName1  PlayerName2  Points
-------  -----------  -----------  ------
   1     Mark         Brian          90
   2     Mike         Mike           85

下面是我的SQL:

代码语言:javascript
运行
AI代码解释
复制
SELECT DISTINCT A.TeamNum, A.PlayerName as PlayerName1, B.PlayerName    AS PlayerName2, C.Points
FROM            ((TodaysTeams A INNER JOIN
                     TodaysTeamsPoints C ON A.TeamNum = C.TeamNum)    INNER JOIN
                     TodaysTeams B ON A.TeamNum = B.TeamNum)
ORDER BY C.Points DESC

我知道我错过了另一个连接,因为我正在返回一个笛卡尔产品(即太多的行)。

对于我在这里遗漏的东西,我将不胜感激。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-06-24 15:12:35

您可以使用聚合:

代码语言:javascript
运行
AI代码解释
复制
SELECT ttp.TeamNum, MIN(tt.PlayerName) as PlayerName1, 
       MAX(tt.PlayerName) as PlayerName2,
       ttp.Points
FROM TodaysTeamsPoints as ttp INNER JOIN
     TodaysTeams as tt 
     ON tt.TeamNum = ttp.TeamNum
GROUP BY ttp.TeamNum, ttp.Points
ORDER BY ttp.Points DESC;
票数 0
EN

Stack Overflow用户

发布于 2019-06-24 17:17:34

虽然戈登建议的方法将很好地工作,假设每个团队最多有两个球员,但如果您添加另一个团队成员并希望在单独的列中显示他们,该方法就会崩溃。

以一种您可以在逻辑上描述但不容易使用查询生成的方式显示数据的困难通常意味着数据库结构不是最优的。

对于您的特定设置,我个人推荐以下结构:

代码语言:javascript
运行
AI代码解释
复制
+---------------+           +----------+------------+
|    Players    |           | PlayerID | PlayerName |
+---------------+           +----------+------------+
| PlayerID (PK) |           |      100 | Mark       |
| PlayerName    |           |      101 | Brian      |
+---------------+           |      102 | Mike       |
                            +----------+------------+
代码语言:javascript
运行
AI代码解释
复制
+-------------+             +--------+----------+
|    Teams    |             | TeamID | TeamName |
+-------------+             +--------+----------+
| TeamID (PK) |             |      1 | Team1    |
| TeamName    |             |      2 | Team2    |
+-------------+             +--------+----------+
代码语言:javascript
运行
AI代码解释
复制
+-------------------+       +--------+--------------+----------+
|    TeamPlayers    |       | TeamID | TeamPlayerID | PlayerID |
+-------------------+       +--------+--------------+----------+
| TeamID (PK)       |       |      1 |            1 |      100 |
| TeamPlayerID (PK) |       |      1 |            2 |      101 |
| PlayerID (FK)     |       |      2 |            1 |      102 |
+-------------------+       |      2 |            2 |      102 |
                            +--------+--------------+----------+

使用这种方法,您可以在TeamPlayerID上使用条件聚合或交叉表查询旋转来生成您的每一列,并且您不会被限制为两列。

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

https://stackoverflow.com/questions/56739292

复制
相关文章
mysql日期格式转换_MySQL日期格式转换
DATE_FORMAT(date,format):根据参数对date进行格式化。1
全栈程序员站长
2022/07/02
11.7K0
日期格式转换
没有人见过风的模样,每当树枝摇曳,水波涟漪或浮云飘过,我们才知道风一直都在从未离开!
栖西
2023/10/17
3100
日期格式转换
Mysql 日期格式转换
DATE_FORMA T(date, format) 根据格式串format 格式化日期或日期和时间值date,返回结果串。
全栈程序员站长
2022/07/02
6.1K0
hive日期格式转换
16/Mar/2022:12:25:01 +0800 转成正常格式(yyyy-MM-dd hh:mm:ss)
chimchim
2022/11/13
2.8K0
Flutter中的日期格式转换
1. Flutter中的日期转换 // 初始化当前日期 DateTime _nowDate = DateTime.now(); // 获取当前时间 print(_nowDate); // 2021-01-01 18:18:37.522021 // 获取当前时间戳 print(_nowDate.millisecondsSinceEpoch); // 1609496743946 // 将时间戳转为格式化的时间 print(DateTime.fromMillisecondsSinceEpoch(160949
越陌度阡
2021/01/05
5.9K0
Power Query日期格式转换
有人问,三列年月日,如何在Power Query变为“20210101”这种样式?
wujunmin
2021/11/26
4K0
[1144]Hive常用日期格式转换
参考:https://blog.csdn.net/wufagang/article/details/124025258 https://www.jianshu.com/p/55f9683c63f1
周小董
2022/05/31
11.7K0
C#日期格式转换
DateTime dt = DateTime.Now; // Label1.Text = dt.ToString();//2005-11-5 13:21:25 // Label2.Text = dt.ToFileTime().ToString();//127756416859912816 // Label3.Text = dt.ToFileTimeUtc().ToString();//127756704859912816 // Label4.Text = dt.ToLocalTime().ToString(
欢醉
2018/01/22
1.9K0
linux时间戳转换日期格式_shell脚本获取时间戳
time_t date_to_timestamp(char *date, char *pfmt)
全栈程序员站长
2022/11/10
8.5K0
LeetCode MySQL 1853. 转换日期格式(日期格式化)
给定一个Days表,请你编写SQL查询语句,将Days表中的每一个日期转化为"day_name, month_name day, year"格式的字符串。
Michael阿明
2021/09/06
3.2K0
springboot,get传日期格式转换
男女双方愿意相互观察是爱情的第一征象——瓦西列 对于这种请求: http://api.achao.cn/example?date=2022-11-09 我们可以配置转换器,mvc则会自动帮我们转
阿超
2022/11/16
8760
sql 时间日期格式转换[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179158.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
6.3K0
sql 时间日期格式转换[通俗易懂]
Java时间日期格式转换
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说Java时间日期格式转换,希望能够帮助大家进步!!!
Java架构师必看
2022/01/13
5K0
js时间戳转换日期格式和日期计算
一、时间戳转换日期 1 function formatDate(datetime) { 2 // 获取年月日时分秒值 slice(-2)过滤掉大于10日期前面的0 3 var year = datetime.getFullYear(), 4 month = ("0" + (datetime.getMonth() + 1)).slice(-2), 5 date = ("0" + datetime.getDate()).
半指温柔乐
2018/09/11
29.2K0
String转换jsonobject格式错误
String转换jsonobject格式错误
全栈程序员站长
2022/09/22
1.1K0
String转换jsonobject格式错误
学会Excel:[4]日期格式、文本格式快速转换
Excel表中日期格式其实是数值,有时候需要原样转成文本,有时候也要将文本转成日期。
用户1191760
2019/02/27
1.5K0
vue格式化时间戳_日期格式转换
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
3.5K0
Postgre时间戳与日期格式转换
目录 一、日期转时间戳 1.不带时区 2.带时区 二、时间戳转日期 1.带时区时间戳转日期 2.带时区时间戳转日期时间 3.带时区时间戳转日期时间时分秒 4. 带时区时间戳转日期时间时分秒毫秒 ---- 一、日期转时间戳 SELECT EXTRACT(epoch FROM NOW()); 1.不带时区 SELECT EXTRACT(epoch FROM CAST('2022-10-11 11:21:00' AS TIMESTAMP)); 2.带时区 如果不加时区时间时间戳比实际实际戳多8个小时。
chimchim
2022/11/13
5.2K0
Postgre时间戳与日期格式转换
Python中获取当前日期的格式
在Python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函数来得到当前的时间或日期呢?
全栈程序员站长
2022/07/11
4.4K0
Python中获取当前日期的格式
在Python里如何获取当前的日期和时间呢?在Python语言里,我们可以通过调用什么模块或者类函数来得到当前的时间或日期呢? 当然你可以使用时间模块(time module),该模块提供了各种和时间相关的函数。但是这个模块里的一些函数在某些平台里不可用。那么怎么办呢?我们 可以使用一个更高级的面向对象的接口函数:datetime。它提供了操作日期和时间的多种简单或复杂的方法。 python里使用time模块来获取当前的时间 1 2 3 time.strftime(format)
用户1217611
2018/01/30
4.6K0

相似问题

Gps (位置)开/关功能

10

ExtJS开/关按钮

10

jQuery自动完成开/关功能

23

Jquery开和关按钮

23

开/关按钮多次切换

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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