SQL选择包含与其他行相交的值的行

时间:2019-03-04 13:46:51

标签: sql sqlite

我有一张表格,可以像这样比较运动结果:

Home    Away    Win
--------------------
A       C       A
C       B       B
A       D       D
C       D       C

我正在尝试比较A队和B队,我知道他们没有参加过比赛 其他。我需要确定是否有一支他们都参加过比赛的球队,如果他们是一支球队,那就返回。我不知道是哪支球队在家或客场踢球。

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

编辑: 我想要的结果是:

Home    Away    Win
--------------------
A       C       A
C       B       B

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

Home    Away    Win
--------------------
A       C       A
E       B       B
A       D       D
C       D       C

在这种情况下,A和B没有共享的团队,因此没有任何回报。

Home    Away    Win
--------------------

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

Home    Away    Win
--------------------
A       C       A
C       B       B
A       D       D
B       D       B
E       A       A

在这种情况下,C和D都是共享的,因此都应该返回。

Home    Away    Win
--------------------
A       C       A
C       B       B
A       D       D
B       D       C

2 个答案:

答案 0 :(得分:1)

您可以通过使用intersect的子查询来完成,以获取所有与“ A”和“ B”对战过的球队:

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 :(得分:0)

我之前有一个类似的问题,这对我有用:https://stackoverflow.com/a/53986459/1830386

如果您不希望将其分组,只需在查询末尾删除GROUP BY语句就可以了