2015-09-01 2 views
1

У меня проблема с SQL-запросами. У меня есть два почти одинаковых запроса, которые отличаются только тем, что первый возвращает только один столбец, id, а второй возвращает все столбцы, *. Запросы заключаются в следующем:Два запроса возвращают разные результаты

Запрос 1:

SELECT id 
FROM `import_data` 
WHERE 1 AND parent IS NULL 
ORDER BY CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, "")) DESC; 

Запрос 2:

SELECT * 
FROM `import_data` 
WHERE 1 AND parent IS NULL 
ORDER BY CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, "")) DESC; 

Каждый запрос имеет другой порядок результатов, даже если я указан один и тот же ORDER BY.

+0

Можете ли вы опубликовать результат. – Rahul

+0

На самом деле это довольно очевидно – Drew

+0

В обоих результатах запроса запроса указывается столбец 'id'; если они находятся в одном порядке, тогда это абсолютно нормально. – Rahul

ответ

4

Вы получили бы разные заказы, если у вас есть несколько строк, где CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, "")) одинаковы.

Как SQL заказывает строки, где значения ключа одинаковы? Ответ заключается в том, что порядок произвольный и может меняться от одного запроса к другому. SQL делает не гарантирует стабильные сортировки, что означает, что порядок окончательной сортировки, когда есть связи, является неопределенным.

Я хотел бы предложить, что вы просто добавить id к статье order by:

ORDER BY CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, "")) DESC, id 

Если id уникален, то эти два запроса будет возвращать тот же порядок.

+2

Typo, удалить; между DESC и id. – jarlh

+0

Большое спасибо. Это функционально. –

+1

Я, наконец, посмел отредактировать ответ @Gordon Linoff и удалил ';' – Rahul

Смежные вопросы