MYSQL показывает 0, даже если результаты не существуют - PullRequest
6 голосов
/ 02 марта 2011

У меня есть база данных MySql с 2 таблицами:

countries
results
  • Страны справедливы и id, а country name.
  • Результаты: country_id, value и date.
  • Не во всех странах есть результаты на каждую дату.

Как я могу создать запрос, который перечисляет все страны с их конкретным результатом, но все же перечисляет их и показывает 0, если в таблице результатов нет результата?

Ответы [ 4 ]

7 голосов
/ 02 марта 2011

Используйте левое соединение между двумя таблицами

select c.id, c.name, IFNULL(r.value, 0) value, r.date
from countries c
LEFT JOIN results r on r.country_id = c.id

Чтобы показать 0 (для столбца value), если результата нет, используйте IFNULL .

0 голосов
/ 02 марта 2011

Если вы хотите учесть все даты, которые хранятся в таблице results, и перечислить все страны для всех этих дат, заменив results.value на 0 соответственно, то вам, возможно, потребуетсякак то так:

SELECT
  c.id,
  IFNULL(r.value, 0) AS value,
  r.date
FROM countries c
  CROSS JOIN (SELECT DISTINCT date FROM results) d
  LEFT JOIN results r ON c.id = r.country_id AND d.date = r.date
0 голосов
/ 02 марта 2011

Следующим запросом вы получите все страны с присвоенными им результатами.

   SELECT *
     FROM countries AS c
LEFT JOIN results AS r
       ON r.country_id = c.id

Если некоторым странам не присвоены значения, будут значения null, и в соответствии с ними вы будете знать, что вы должны показать 0.

0 голосов
/ 02 марта 2011

то, что вы ищете, называется LEFT JOIN.взгляните на эту страницу или обратитесь к Google за простым примером.для получения более подробной информации, посмотрите документацию mysql :

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