Why does this work:
SET @cnt = 0; SELECT (@cnt:=@cnt+1) AS 'foo', title FROM employee;
But when I add ‘distinct’ keyword, it does not, while distinct works on its own (not shown).
SET @cnt = 0; SELECT (@cnt:=@cnt+1) AS 'foo', distinct title FROM employee; // "error in syntax"
In other words, you can have a custom column or a distinct keyword but not both.
I think it’s because each part is trying to return a different number of records for each and that throws an error, but I want it to return the same number of records, the distinct column being the limiter. Please share the keywords and technical terms of what I’m trying to do so I can learn and grow. Also let me know if this should’ve/could’ve gone in the database admin stack exchange.
Advertisement
Answer
This syntax is nonsensical SQL:
SELECT (@cnt:=@cnt+1) AS 'foo', distinct title FROM employee; // "error in syntax"
Why? Because DISTINCT
is used in two places in SQL (that I can readily think of):
- As a modifier to aggregation functions, notably
COUNT(DISTINCT)
. - As part of the SQL keyword
SELECT DISTINCT
.
(There are other uses such as IS DISTINCT FROM
but MySQL does not support that.)
In the latter case, the DISTINCT
applies to all columns being selected. I would recommend putting this in a subquery:
SELECT (@cnt := @cnt + 1) AS foo, title FROM (SELECT DISTINCT title FROM employee) e; // "error in syntax"