SQL выберите строку, содержащую значение от пересечения с другой строкой - PullRequest
0 голосов
/ 04 марта 2019

У меня есть таблица, которая сравнивает спортивные результаты примерно так:

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

Я пытаюсь сравнить команду A и команду B, я знаю, что они не играли друг с другом.Мне нужно выяснить, есть ли команда, в которой они оба играли, и если это одна команда, вернуть ее.Я не знаю, какая команда играла дома или в гостях.

В этом случае и А, и В играли в команде С, поэтому мне понадобятся первые два ряда.Есть ли способ сделать это с помощью 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 голосов
/ 05 марта 2019

У меня раньше была похожая проблема, вот что сработало для меня: https://stackoverflow.com/a/53986459/1830386

Если вы не хотите, чтобы оно группировалось, просто удалите оператор GROUP BY в конце запроса, и вы должныхороший

0 голосов
/ 05 марта 2019

Вы можете сделать это с помощью подзапроса, который использует 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'
    )

См. Демонстрационную версию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...