Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL选择包含与其他行相交的值的行_Sql_Sqlite - Fatal编程技术网

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我编辑了这个问题以添加示例,我希望现在已经清楚了。