我有一张表格,可以像这样比较运动结果:
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
答案 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语句就可以了