Mysql / select count(*) as count / where count>0

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Maxim Glushko
Сообщения: 98
Зарегистрирован: 2017.04.24, 19:16
Откуда: Україна, Одеса

Mysql / select count(*) as count / where count>0

Сообщение Maxim Glushko »

Код: Выделить всё

select
	authors.*,
	(select count(*) from books where books.author_id = authors.id) as books_count
from authors
where books_count > 0
Напишет, что не существует поля books_count.
Чего я не понимаю?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Mysql / select count(*) as count / where count>0

Сообщение SiZE »

Standard SQL doesn't allow you to refer to a column alias in a WHERE clause. This restriction is imposed because when the WHERE code is executed, the column value may not yet be determined.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Mysql / select count(*) as count / where count>0

Сообщение SiZE »

Если не стрикт мод, иначе через подзапрос.

Код: Выделить всё

SELECT
	a.*,
	COUNT(*) books_count
FROM
	authors a
	INNER JOIN books b ON b.author_id = a.id
GROUP BY
	a.id
Аватара пользователя
Maxim Glushko
Сообщения: 98
Зарегистрирован: 2017.04.24, 19:16
Откуда: Україна, Одеса

Re: Mysql / select count(*) as count / where count>0

Сообщение Maxim Glushko »

Если мне значение не нужно, а важны лишь авторы с хотя бы одной книгой, я знаю, что делать:

Код: Выделить всё

select
	authors.*
from authors
where
	(select count(*) from books where books.author_id = authors.id) > 0
Но если понадобится-таки, два раза, что ли, выражение вставлять?

Код: Выделить всё

select
	authors.*,
	(select count(*) from books where books.author_id = authors.id) as books_count
from authors
where
	(select count(*) from books where books.author_id = authors.id) > 0
Какой-то нехороший баг. В других SQL тоже такое?
Аватара пользователя
Maxim Glushko
Сообщения: 98
Зарегистрирован: 2017.04.24, 19:16
Откуда: Україна, Одеса

Re: Mysql / select count(*) as count / where count>0

Сообщение Maxim Glushko »

SiZE, спасибо.
А с where?
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Mysql / select count(*) as count / where count>0

Сообщение SiZE »

Какой еще баг? Какие другие SQL? Есть стандарт SQL в котором сказано то, что я привел выше.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Mysql / select count(*) as count / where count>0

Сообщение SiZE »

Maxim Glushko писал(а): 2017.05.11, 09:15 А с where?
Я же привел запрос, что еще не понятно?
Ответить