Получение данных из подключенной таблицы - PullRequest
0 голосов
/ 01 июня 2018

У меня есть две таблицы, подобные этой.

create table teams (
  "ID" Integer NOT NULL ,
  "STADIUM_ID" Integer NOT NULL ,
  "NAME" Varchar2 (50) NOT NULL ,
    primary key ("ID") 
    ) ;

create table matches (
  "ID" Integer NOT NULL ,
  "HOMETEAM_ID" Integer NOT NULL ,
  "OPPONENT_ID" Integer NOT NULL ,
  "HOMESCORE" Integer,
  "OPPONENTSCORE" Integer,
primary key ("ID","HOME_ID","OPPONENT_ID") 
) ;

У них есть следующие данные:

select * from matches;

ID      HOME_ID OPPONENT_ID HOMESCORE OPPONENTSCORE
 1          5           2           5             2
 2          4           5           1             0
 3          3           2           1             0
 4          3           2           1             0
 5          1           2           2             0
 6          3           1           2             1

select * from teams;

ID     STADIUM_ID    NAME
 1          1        Team1
 2          3        Team2
 3          4        Team3
 4          2        Team4
 5          5        Team5

Мне нужно получить команды, которые проиграли матч дома (стот же стадионид, что и победитель).Очень ценю вашу помощь ... Ожидаемый результат - нет для этих данных, потому что у каждой команды есть свой стадион.

Некоторые запросы не будут работать, но покажут, что я хочу получить.

select op.name from matches, (select name, stadium_id from teams where id = matches.home_id) home, (select name, stadium_id from teams where id = matches.opponent_id) op where home.stadium_id = op.stadium_id;

В этом запросе есть две проблемы - я не сравниваю счет, чтобы получить проигравшую команду, и я не могу получить доступ к совпадениям в подзапросах, подобных этому.

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Вы хотите команды, которые проиграли дома.Псевдокод: select from teams where team in (set of home match losers).

select *
from teams
where id in
(
  select hometeam_id
  from matches
  where homescore < opponentscore
);
0 голосов
/ 01 июня 2018

Вы можете использовать этот запрос, если вам нужен только список всех команд, которые проиграли хотя бы один матч дома.Он учитывает тот факт, что две команды могут играть снова в будущем.

SELECT DISTINCT teams.stadium_id, teams.name
FROM matches
INNER JOIN teams ON (matches.home_id = teams.stadium_id)
WHERE matches.homescore < matches.opponentscore
0 голосов
/ 01 июня 2018

Попробуйте это решение:

select m.*,h.NAME as Home,o.NAME as Opponent from matches as m
Join teams h on h.STADIUM_ID = m.HOMETEAM_ID
Join teams o on o.STADIUM_ID = m.OPPONENT_ID
where m.HOMESCORE < m.OPPONENTSCORE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...