MySQL совпадает с датами и возвращает null при соединении - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь объединить некоторые данные НБА, оценки бокса и продвинутую статистику игрока.На данный момент у меня есть запрос:

select boxes.GNO, boxes.NAME, boxes.DATE, advstat.YEAR, advstat.NAME, advstat.AGE
from boxes left join advstat on boxes.NAME=advstat.NAME
group by boxes.NAME, boxes.GNO having boxes.GNO = 1;

boxes.GNO = 1 просто для ограничения данных, возвращаемых на данный момент, в конечном итоге я буду возвращать данные для всех игр в таблице коробок.

С помощью вышеприведенного запроса я получаю следующий вывод:

+------+------------------+------------+------+------------------+------+
| GNO  | NAME             | DATE       | YEAR | NAME             | AGE  |
+------+------------------+------------+------+------------------+------+
|    1 | Al Horford       | 2017-10-17 | 2008 | Al Horford       |   21 |
|    1 | Aron Baynes      | 2017-10-17 | 2013 | Aron Baynes      |   26 |
|    1 | Derrick Rose     | 2017-10-17 | 2009 | Derrick Rose     |   20 |
|    1 | Dwyane Wade      | 2017-10-17 | 2004 | Dwyane Wade      |   22 |
|    1 | Gordon Hayward   | 2017-10-17 | 2011 | Gordon Hayward   |   20 |
|    1 | Iman Shumpert    | 2017-10-17 | 2012 | Iman Shumpert    |   21 |
|    1 | Jae Crowder      | 2017-10-17 | 2013 | Jae Crowder      |   22 |
|    1 | Jaylen Brown     | 2017-10-17 | 2017 | Jaylen Brown     |   20 |
|    1 | Jayson Tatum     | 2017-10-17 | NULL | NULL             | NULL |
|    1 | Jeff Green       | 2017-10-17 | 2008 | Jeff Green       |   21 |
|    1 | JR Smith         | 2017-10-17 | NULL | NULL             | NULL |
|    1 | Kevin Love       | 2017-10-17 | 2009 | Kevin Love       |   20 |
|    1 | Kyle Korver      | 2017-10-17 | 2004 | Kyle Korver      |   22 |
|    1 | Kyrie Irving     | 2017-10-17 | 2012 | Kyrie Irving     |   19 |
|    1 | LeBron James     | 2017-10-17 | 2004 | LeBron James     |   19 |
|    1 | Marcus Smart     | 2017-10-17 | 2015 | Marcus Smart     |   20 |
|    1 | Semi Ojeleye     | 2017-10-17 | NULL | NULL             | NULL |
|    1 | Shane Larkin     | 2017-10-17 | 2014 | Shane Larkin     |   21 |
|    1 | Terry Rozier     | 2017-10-17 | 2016 | Terry Rozier     |   21 |
|    1 | Tristan Thompson | 2017-10-17 | 2012 | Tristan Thompson |   20 |
+------+------------------+------------+------+------------------+------+

Это почти правильно .. однако мне нужно advstat.YEAR для сопоставления года (boxes.DATE).Если я добавлю .. где year (boxes.DATE) = advstat.YEAR, данные NULL будут исключены, а это не то, что я хочу.Мне нужно, чтобы таблица выглядела так, как показано выше, только если годы правильно расположены между двумя таблицами.

Любая помощь будет принята с благодарностью!Ура!

1 Ответ

0 голосов
/ 23 октября 2018

Это то, что вы хотите?

select b.GNO, b.NAME, b.DATE, s.YEAR, s.NAME, s.AGE
from boxes b left join
     advstat s
     on b.NAME = s.NAME and year(b.date) = s.year
where b.GNO = 1
group by b.NAME, b.GNO ;

Обратите внимание, что фильтрация до group by обычно более эффективна, поэтому я рекомендую where вместо having.

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