Arhn - архитектура программирования

Использование Order By с Distinct в соединении (PLSQL)

Я написал соединение для некоторых таблиц и упорядочил данные, используя два уровня упорядочения, один из которых является первичным ключом одной таблицы.

Теперь, когда эти данные отсортированы, я хочу затем исключить любые дубликаты из моих данных, используя встроенное представление и предложение DISTINCT, и именно здесь я не застреваю.

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

Этот код возвращает отсортированные данные, но с дубликатами

                SELECT 
                    ada.source_tab source_tab
                  , ada.source_col source_col
                  , ada.source_value source_value
                  , ada.ada_id ada_id
                FROM 
                    are_aud_data ada
                  , are_aud_exec_checks aec
                  , are_audit_elements ael
                WHERE 
                      aec.aec_id = ada.aec_id
                  AND ael.ano_id = aec.ano_id
                  AND aec.acn_id = 123456
                  AND ael.ael_type = 1
                ORDER BY 
                  CASE
                    WHEN source_tab = 'Tab type 1' THEN 1
                    WHEN source_tab = 'Tab type 2' THEN 2
                    ELSE 3
                  END
              ,ada.ada_id ASC;

Этот код удаляет дубликаты, но я теряю порядок...

SELECT DISTINCT source_tab, source_col, source_value FROM (
                SELECT 
                    ada.source_tab
                  , ada.source_col source_col
                  , ada.source_value source_value
                  , ada.ada_id ada_id
                FROM 
                    are_aud_data ada
                  , are_aud_exec_checks aec
                  , are_audit_elements ael
                WHERE 
                      aec.aec_id = ada.aec_id
                  AND ael.ano_id = aec.ano_id
                  AND aec.acn_id = 123456
                  AND ael.ael_type = 1
                ORDER BY 
                  CASE
                    WHEN source_tab = 'Tab type 1' THEN 1
                    WHEN source_tab = 'Tab type 2' THEN 2
                    ELSE 3
                  END
              ,ada.ada_id ASC
     )
;

Если я попытаюсь включить «ORDER BY ada_id» в конце внешнего выбора, я получу сообщение об ошибке «ORA-01791: not a SELECTed expression», что меня бесит!!


Ответы:


1

Почему бы вам не включить ada_id в выбранные поля внешнего запроса?

20.02.2012
  • ada_id является первичным ключом, поэтому каждая запись уникальна (это аннулирует мое предложение DISTINCT). Я бы подумал, что смогу включить ORDER BY ada_id во внешний запрос, но, как я уже сказал, он возвращает ошибку :S 20.02.2012

  • 2

    кажется, что ada_id не имеет смысла во внешнем запросе. вы удалили все эти значения, чтобы свести их к отдельным source_tab и source_col...

    какой вы ожидаете порядок?

    вы хотите, чтобы минимальный набор ada_id для каждой таблицы и столбца был драйвером для заказа - (хотя имя таблицы кажется мне подходящим)

    включите минимальный ada_id во внутренний запрос (вам понадобится предложение group by), затем укажите его во внешнем запросе и отсортируйте по нему.

    20.02.2012
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..