SQL count + join генерирует синтаксическую ошибку, но работает нормально без подсчета - PullRequest
0 голосов
/ 09 июня 2018

Я получаю странную синтаксическую ошибку со следующим запросом:

SELECT COUNT (*) 
FROM a 
JOIN b ON a.id = b.a_id

Но запрос без COUNT работает как чудо:

SELECT * 
FROM a 
JOIN b ON a.id = b.a_id

Добавление спецификации JOIN как INNER,ВЛЕВО и т. Д. - не помогает.

Синтаксическая ошибка не указывает точно, что не так, просто предоставляет определенные коды: [42000] [1064]

Какисправить это?

РЕДАКТИРОВАТЬ:

Вот оно:

SELECT COUNT(customers.*) 
FROM customers 
JOIN customer_behaviour ON customers.id = customer_behaviour.customer_id

Удаление COUNT делает его полностью действительным.Это действительно странно!

1 Ответ

0 голосов
/ 09 июня 2018

Удалить пробел между COUNT и (*):

SELECT COUNT(*) FROM a JOIN b ON a.id = b.a_id 
    -- COUNT (*)

DBFiddle Demo


РЕДАКТИРОВАТЬ:

SELECT COUNT(customers.*) 
FROM customers 
JOIN customer_behaviour 
  ON customers.id = customer_behaviour.customer_id

-- should be    
SELECT COUNT(*) 
FROM customers 
JOIN customer_behaviour 
  ON customers.id = customer_behaviour.customer_id

-- or
SELECT COUNT(customers.id) 
FROM customers 
JOIN customer_behaviour 
  ON customers.id = customer_behaviour.customer_id

РЕДАКТИРОВАТЬ 2

Теперь я могу добавить DISTINCT к нему?Похоже, использование COUNT (DISTINCT ...) начинает выдавать ошибку снова!

Просто определив имя столбца:

SELECT COUNT(DISTINCT table_name.column_name) 
FROM customers 
JOIN customer_behaviour 
  ON customers.id = customer_behaviour.customer_id
...