Запрос не показывает 0 значений mysql

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

Вот картинка для визуального аспекта: Таблица

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

Заранее спасибо.

Вот мой код до сих пор:

select customer.hippcode, customer.LastName, customer.Firstname, customer.Email,
count(ticketdetails.eventtype) as 'Theater Tickets',
0 as 'Movie Tickets'
from customer
inner join ticketdetails on ticketdetails.hippcode = customer.hippcode
where ticketdetails.hippcode is not null
and ticketdetails.eventType ='T'
Group by Customer.hippcode
union
select customer.hippcode, customer.LastName, customer.Firstname, customer.Email,
0 as 'Theater Tickets', count(ticketdetails.eventtype) as 'Movie Tickets'
from customer
inner join ticketdetails on ticketdetails.hippcode = customer.hippcode
where ticketdetails.hippcode is not null
and ticketdetails.eventType ='M'
Group by Customer.hippcode
order by `theater tickets` + `movie tickets` desc;
select
customer.hippcode, customer.LastName, customer.Firstname, customer.Email,
sum(case when ticketdetails.eventtype = 'T' then 1 else 0 end) as TheaterTickets,
sum(case when ticketdetails.eventtype = 'M' then 1 else 0 end) as MovieTickets
from customer
inner join ticketdetails on ticketdetails.hippcode = customer.hippcode
where ticketdetails.hippcode is not null
and ticketdetails.eventType in ('T', 'M')
Group by customer.hippcode, customer.LastName, customer.Firstname, customer.Email
Order by 'TheaterTickets' + 'MovieTickets' desc

0

Решение

inner join => выводить строку только если вы получили запись на обе таблицы.

Я думаю, что вы должны использовать LEFT JOIN где-то выбрать мастер-стол

http://dev.mysql.com/doc/refman/5.7/en/join.html а также
http://dev.mysql.com/doc/refman/5.7/en/left-join-optimization.html

0

Другие решения

Я думаю, что последний запрос — единственный, который вы хотите. left join уместно, но вы должны быть осторожны с where пункт:

select c.hippcode, c.LastName, c.Firstname, c.Email,
sum(td.eventtype) as TheaterTickets,
sum(td.eventtype) as MovieTickets
from customer c left join
ticketdetails td
on td.hippcode = c.hippcode and
td.eventType in ('T', 'M')
Group by c.hippcode, c.LastName, c.Firstname, c.Email
Order by count(t.hippcode) desc;

Заметки:

  • Псевдонимы таблиц облегчают чтение и запись запроса.
  • Условия на ticketdetails идти в on пункт, а не where пункт.
  • Состояние на td.hippcode is not null не нужно, потому что NULL не будет совпадать в join (примечание: вы можете проверить столбец клиента).
  • case это стандартный способ сделать условную сумму (и, следовательно, правильно). Тем не менее, MySQL предлагает гораздо более простой и интуитивно понятный синтаксис.
  • Ваш заказ по ничего не делал, потому что он добавляет две строки (следовательно, эквивалентно order by 0, Не используйте одинарные кавычки Когда-либо для имен столбцов, и у вас не будет такой проблемы.
0

По вопросам рекламы [email protected]