Запрос дает 1 на нулевые значения - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть две таблицы, содержащие исполнителей (исполнитель) и страны (страна), я пытаюсь объединить эти две таблицы и хочу отобразить страны, в которых имеется 0 исполнителей (страны, которых вообще нет в таблице исполнителей),Этот запрос дает мне всех исполнителей, но вместо «0» в ряду со странами, в которых есть 0 исполнителей, он дает «1».Нужно ли указывать его где-нибудь, какое значение оно должно дать в случае, если оно пустое?

SELECT   c.country_name AS shteti, COUNT(*) AS count
FROM   country c
left outer join artist a
ON  c.countryID = a.FK_countryID 
GROUP BY c.country_name

so it gives Andorra 1, even though Andorra is not at all in the Artist 
table.

"Albania"   "5"
"Andorra"   "1"
"Argentina" "2"

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Вам нужен left join, и вы получите только те строки, где a.FK_countryID IS NULL

SELECT   c.country_name AS shteti, 0 AS count
FROM   country c
left join artist a
ON  c.countryID = a.FK_countryID 
WHERE a.FK_countryID IS NULL

Это дает вам все страны, которых нет в таблице исполнителей.Я оставил 0 как 2-й столбец, но он не нужен.

0 голосов
/ 11 февраля 2019

Используйте COUNT(a.FK_countryID) вместо.Считает только ненулевые записи, в то время как COUNT(*) считает строки, независимо от того, является ли столбец нулевым или нет.

COUNT(a.FK_countryID) даст точное количество артистов из этой страны, включая 0.

Поскольку вы используете LEFT JOIN, ваш запрос вернет строку с названием страны, но пустую запись для FK_countryID, если не найдено подходящего исполнителя.

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