Попробуйте этот более простой запрос:
SELECT b.*, COUNT(*) AS Editions_count
FROM Books b JOIN Books g USING (Edition_Group_ISBN)
WHERE b.ISBN = 9780140447897
GROUP BY b.book_id;
Я думаю, что вы сделали проблему гораздо сложнее, чем нужно.Ваш исходный запрос полон запутанных подзапросов, по крайней мере, один из них совершенно лишний.
Re ваши комментарии:
Да, он отлично работает для сравнения ISBN с несколькими значениями таким образом:
SELECT b.*, COUNT(*) AS Editions_count
FROM Books b JOIN Books g USING (Edition_Group_ISBN)
WHERE b.ISBN IN (9780140447897, 9781934356555)
GROUP BY b.book_id;
COUNT(*)
поддерживает только простой подстановочный знак *
, что означает подсчет всех строк в группе.
Или вы можете использовать определенное выражение, например COUNT(g.Edition_Group_ISBN)
, что означает подсчет всех строк в группе, где это выражение не равно нулю.
Но вы не можете использовать g.*
, потому что это неоднозначно.Считает ли он все строки в группе?(если так, просто используйте COUNT(*)
). Считает ли он ненулевые строки в группе?Что бы это значило в любом случае - считать строки, в которых все столбцы из g
не равны нулю или где любые столбцы из g
не равны нулю?По этим причинам COUNT(g.*)
просто не является допустимой конструкцией в языке SQL.