首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL select行包含来自intersect的值与其他行

SQL select行包含来自intersect的值与其他行
EN

Stack Overflow用户
提问于 2019-03-04 21:46:51
回答 2查看 38关注 0票数 0

我有一个比较运动结果的表格,如下所示:

代码语言:javascript
复制
Home    Away    Win
--------------------
A       C       A
C       B       B
A       D       D
C       D       C

我在试着比较A队和B队,我知道他们还没有上场过。我需要找出是否有一支他们都打过的球队,如果他们是一支球队,那就是返回。我不知道哪支球队在主场还是客场比赛。

在这种情况下,A和B都是C队,所以我需要前两行。有没有办法用SQL做到这一点?

编辑:我想要的结果是:

代码语言:javascript
复制
Home    Away    Win
--------------------
A       C       A
C       B       B

如果没有共享团队,则不应返回任何内容。

代码语言:javascript
复制
Home    Away    Win
--------------------
A       C       A
E       B       B
A       D       D
C       D       C

在这种情况下,A和B没有共享团队,因此不应返回任何内容。

代码语言:javascript
复制
Home    Away    Win
--------------------

如果有多个共享团队,则应返回所有共享团队。

代码语言:javascript
复制
Home    Away    Win
--------------------
A       C       A
C       B       B
A       D       D
B       D       B
E       A       A

在这种情况下,C和D都是共享的,所以它们都应该被返回。

代码语言:javascript
复制
Home    Away    Win
--------------------
A       C       A
C       B       B
A       D       D
B       D       C
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-05 08:29:46

您可以使用一个子查询来实现这一点,该子查询使用intersect来获取'A‘和'B’都曾对阵过的所有球队:

代码语言:javascript
复制
select * from tablename 
where 
    (home in ('A', 'B') or away in ('A', 'B'))
    and 
    case when home in ('A', 'B') then away else home end in (
      select case when home = 'A' then away else home end team 
      from tablename where home = 'A' or away = 'A'
      intersect  
      select case when home = 'B' then away else home end team 
      from tablename where home = 'B' or away = 'B'
    )

请参阅demo

票数 1
EN

Stack Overflow用户

发布于 2019-03-05 08:33:16

我之前也遇到过类似的问题,下面是对我有效的方法:https://stackoverflow.com/a/53986459/1830386

如果您不想将其分组,只需删除查询末尾的group BY语句,就可以了

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

https://stackoverflow.com/questions/54984617

复制
相关文章

相似问题

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