SQL选择包含与其他行相交的值的行
我有一张表格,上面比较了如下运动成绩:SQL选择包含与其他行相交的值的行,sql,sqlite,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
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
Home Away Win
--------------------
A C A
C B B
A D D
B D C
如果有多个共享团队,则应返回所有共享团队
Home Away Win
--------------------
Home Away Win
--------------------
A C A
C B B
A D D
B D B
E A A
Home Away Win
--------------------
A C A
C B B
A D D
B D C
在这种情况下,C和D都是共享的,因此它们都应该返回
Home Away Win
--------------------
Home Away Win
--------------------
A C A
C B B
A D D
B D B
E A A
Home Away Win
--------------------
A C A
C B B
A D D
B D C
您可以通过使用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'
)
参见我之前也遇到过类似的问题,以下是对我有效的方法:
如果您不想将其分组,只需删除查询末尾的group BY语句,您就应该很好了您的问题不清楚。你想要什么结果?@GordonLinoff我想要找到一个C A和C B B,因为A队和B队都与C队交手。如果B队与D队交手,我也想要这个结果。编辑您的问题并显示所需的结果。问题还不清楚。另外,还要解决如果有一个以上的第三方团队或没有第三方团队会发生什么的问题。@GordonLinoff我编辑了这个问题以添加示例,我希望现在已经清楚了。