SQL SELECT - выберите, только если существует другая запись

0

В приведенном ниже примере я хочу отображать данные только для 1904 игроков, у которых есть запись 1903 года. Что бы я добавил к SQL для этого?

SELECT * 
FROM pitchers 
WHERE year = 1904 

+------+-----------+-----------+-----+-----+
| year | playerID  | nameLast  | IP  | ER  |
+------+-----------+-----------+-----+-----+
| 1903 | mathech01 | Mathewson | 366 |  92 |
| 1903 | youngcy01 | Young     | 341 |  79 |
| 1904 | mathech01 | Mathewson | 367 |  83 |
| 1904 | walshed01 | Walsh     | 110 |  32 |
| 1904 | youngcy01 | Young     | 380 |  83 |
+------+-----------+-----------+-----+-----+

Используя приведенный выше пример таблицы, я только хочу собрать данные 1904 года для Мэтьюсона и Янга и не включать Уолша (так как у него не было записи 1903 года).

Теги:

2 ответа

1
Лучший ответ

Вы можете использовать exists:

SELECT p.* 
FROM pitchers p
WHERE p.year = 1904 and
      EXISTS (SELECT 1 FROM pitchers p2 WHERE p2.playerID = p.playerID and p2.year = 1903);
  • 0
    Этот работал для меня.
1

Этот запрос позволит вам изменить год только в одном месте. Он принимает бизнес-правило, в котором у вас будет только одна строка за (playerID, год):

SELECT thisyear.*
FROM pitchers AS thisyear
INNER JOIN pitchers AS lastyear
    ON lastyear.'playerID' = thisyear.'playerID'
    AND lastyear.year + 1 = thisyear.year
WHERE thisyear.year = 1904 
  • 0
    Я не пробовал этот. Просто потому, что я больше знаком с EXISTS, чем с INNER JOIN.
  • 1
    @ user2140857 - Но обратите внимание, что он использовал lastyear vs thisyear. Это может (или не может) быть частью того, что вам действительно нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню