我有一个比较运动结果的表格,如下所示:
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
发布于 2019-03-05 08:29:46
您可以使用一个子查询来实现这一点,该子查询使用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
发布于 2019-03-05 08:33:16
我之前也遇到过类似的问题,下面是对我有效的方法:https://stackoverflow.com/a/53986459/1830386
如果您不想将其分组,只需删除查询末尾的group BY语句,就可以了
https://stackoverflow.com/questions/54984617
复制相似问题