Задать вопрос
@cptedward_kenway
Как жить, если Константин Цветков не ответил?

Почему не работает DISTINCT с ORDER BY в подзапросе?

Нужно вывести процессы по контейнеру, но без повторений, в определенном порядке, который указывается в exec_order.
У некоторых контейнеров есть процессы одинаковые, но с разным параметром exec_order.
Для исключения дублей был использован distinct, но чтобы была сортировка с distinct, нужно чтобы поле было включено в селект, а этого нельзя допустить, т.к. это поле в массиве в принципе не нужно, так еще оно разбивает одинаковые процесс по exec_order в выборке.
select DISTINCT PROCESS_ID, DIRECTORY_PATH_INC
from(
SELECT DISTINCT con.CONTAINER_PROCESS_ID AS CONTAINER_PROCESS_ID, 
      con.PROCESS_ID AS PROCESS_ID, dir.DIRECTORY_PATH AS DIRECTORY_PATH_INC, 
      con.EXEC_ORDER AS EXEC_ORDER
FROM 
    prc_container con 
    JOIN prc_process proc ON con.CONTAINER_PROCESS_ID = proc.ID
    JOIN prc_file_attribute fa ON fa.container_id = con.id
    JOIN prc_directory dir ON fa.LOCATION_ID = dir.ID
    JOIN prc_file fi on fi.id = fa.file_id
    order by EXEC_ORDER ASC
    )
    where CONTAINER_PROCESS_ID = '34'
  • Вопрос задан
  • 208 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Используйте только внешний DISTINCT. Да и условие можно в подзапрос перенести.

А может так?
SELECT DISTINCT 
      '34' AS PROCESS_ID, 
      dir.DIRECTORY_PATH AS DIRECTORY_PATH_INC, 
      con.EXEC_ORDER
FROM 
    prc_container con 
    JOIN prc_file_attribute fa ON fa.container_id = con.id
    JOIN prc_directory dir ON fa.LOCATION_ID = dir.ID
ORDER BY EXEC_ORDER
WHERE CONTAINER_PROCESS_ID = '34'

Почему не работает DISTINCT с ORDER BY в подзапросе?
Потому что для одинаковых dir.DIRECTORY_PATH у вас разные con.EXEC_ORDER. И что использовать для сортировки? Неопределённости быть не должно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы