Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL select distinct não funciona


Por causa do ORDER BY id DESC cláusula, a consulta é tratada como se tivesse sido escrita:
SELECT DISTINCT name, id
  FROM table
 ORDER BY id DESC;

exceto que o id colunas não são retornadas ao usuário (você). O conjunto de resultados deve incluir o id para poder encomendar por ele. Obviamente, esse conjunto de resultados tem quatro linhas, então é isso que é retornado. (Moral:não ordene por colunas ocultas - a menos que você saiba o que isso fará com sua consulta.)

Tentar:
SELECT DISTINCT name
  FROM table
 ORDER BY name;

(com ou sem DESC de acordo com o capricho). Isso retornará apenas as duas linhas.

Se você precisa saber um id para cada nome, considere:
SELECT name, MIN(id)
  FROM table
 GROUP BY name
 ORDER BY MIN(id) DESC;

Você pode usar o MAX para um efeito igualmente bom.

Tudo isso se aplica a todos os bancos de dados SQL, incluindo MySQL. O MySQL tem algumas regras que permitem a você omitir cláusulas GROUP BY com resultados um tanto não determinísticos. Eu recomendo contra a exploração do recurso.

Por muito tempo (talvez até agora) o padrão SQL não permitia ordenar por colunas que não estavam na lista de seleção, justamente para evitar confusões como essa. Quando o conjunto de resultados não inclui os dados de ordenação, a ordenação do conjunto de resultados é chamada de 'ordenação essencial'; se todas as colunas de ordenação aparecerem no conjunto de resultados, é uma 'ordenação não essencial' porque você tem dados suficientes para ordenar os dados por conta própria.