2010-11-19 3 views
1

Если я запускаю следующий запрос:MySQL Order-By Bug

select * from mysql.user order by abcdef; 

MySQL выдает следующее сообщение об ошибке:

ERROR 1054 (42S22): Unknown column 'abcdef' in 'order clause'

Если я запускаю следующий подобный запрос:

select * from mysql.user order by "abcdef"; 

MySQL теперь выполняет запрос и игнорирует предложение order by (поскольку в таблице mysql.user отсутствует столбец с именем «abcdef»).

Это ошибка в MySQL? Почему вы хотите, чтобы заказ был неудачным, когда фраза была в кавычках? Не было бы подходящим сообщение об ошибке при запуске порядка в несуществующем столбце?

ответ

4

Он не игнорирует его, он приказы по строковое «ABCDEF», а не столбец. Он делает именно то, что вы просите: упорядочивая какую-то произвольную строку (что, скорее всего, ничего не делает).

Большинство СУРБД не принимает на заказ константу (это не имеет смысла), но MySQL делает.

+0

Да, но что произойдет, если бы у меня был столбец с именем «abcdef». Будет ли порядок «abcdef» работать тогда? – David

+0

Он будет делать то же самое, что и сейчас, потому что «abcdef» - ​​это строка, а не столбец. порядок от abcdef будет работать. – aehiilrs

+0

+1 Сравните это с общей типологией 'SELECT 8 FROM Table', которая возвращает ...' 8'. Все SQL-механизмы, которые я видел, будут точно соответствовать константам SELECT и ORDER BY - такое поведение просто не всегда так полезно. :) –

3

Если вы не используете кавычки, предполагается, что вы ссылаетесь на имя столбца, , которого не существует.

Это правильно Функция добавления

-1

Порядок по ожидает поле вы хотите сделать заказ, и если вы хотите, по возрастанию вы кладете ИССА рядом с ним, и если вы хотите, по убыванию вы поставите DESC как следующий

SELECT * 
    FROM mysq.user 
ORDER BY username ASC