Хобрук: Ваш путь к мастерству в программировании

Если существует в таблице 1, отобразите таблицу 2, иначе отобразите таблицу 1 для записей таблицы 3 в SQL.

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

Здесь у меня есть таблица ALL_RECORD

ID    NAME    STUD_ID    INFO
 1     Jose    123456    abcd
 1     Jose    <null>    abcd
 2     Ann     123457    abcde
 2     Ann     <null>    abcde
 3     Kyle    123444    abcdq
 4     Cynt    <null>    abcdw
 4     Cynt    111112    abcdw

Мои значения таблицы ALL_RECORD были вставлены из моих RECORD1 и RECORD2

Таблица RECORD1

ID    NAME    STUD_ID    INFO
 1     Jose    <null>    abcd
 2     Ann     <null>    abcde
 4     Cynt    <null>    abcdw

Таблица RECORD2

ID    NAME    STUD_ID    INFO
 1     Jose    123456    abcd
 2     Ann     123457    abcde
 3     Kyle    123444    abcdq
 4     Cynt    111112    abcd

Что я хочу отобразить

ID    NAME    STUD_ID    INFO
 1     Jose    <null>    abcd
 2     Ann     <null>    abcde
 3     Kyle    123444    abcdq
 4     Cynt    <null>    abcdw

Пожалуйста, обратите внимание на идентификационный номер. 3.

Мой тестовый запрос1

select distinct(id), name, stud_id, info from ALL_RECORD;

Мой тестовый запрос2

select * from ALL_RECORD where id is null;

Мой тестовый запрос3

select * from ALL_RECORD where id is null and id in (select * from record2) group by id;

все еще не могу получить правильный вывод

26.01.2017

  • Не связано, но: distinct не является функцией. Он всегда применяется ко всем столбцам в списке выбора. distinct (id), name точно совпадает с distinct id,name или distinct id,(name) 26.01.2017
  • Если существует в таблице 1, отображать таблицу 2, иначе отображать таблицу 1? Итак, если запись не существует в таблице 1, мы покажем эту несуществующую запись? 26.01.2017

Ответы:


1

Вы можете сделать это с помощью оконной функции:

select id, name, stud_id, info
from (
   select id, name,stud_id,info, 
          row_number() over (partition by id,name order by stud_id nulls first) as rn
   from all_record
) t
where rn = 1;

row_number() присваивает порядковые номера на основе критериев сортировки, указанных в предложении order by. Поскольку вы хотите, чтобы значения null имели более высокий «приоритет», чем ненулевое значение, вам нужно использовать nulls first, чтобы присвоить им номер строки 1. Обратите внимание, что если существует более одной строки для комбинации id,name с нулевым значением для stud_id это выбирает произвольный.

26.01.2017
  • Это работает, хотя я не знаком с оконной функцией. Спасибо :) 26.01.2017

  • 2

    Вы хотите показать все записи table2, а также те записи table1, идентификатор которых не может быть найден в table2.

    select id, name, stud_id, info from table2
    union all
    select id, name, stud_id, info from table1 where id not in (select id from table2)
    order by id;
    
    26.01.2017
  • но существует только таблица ALL_RECORD 26.01.2017
  • Тогда удивительно, что вы смогли написать свой запрос №3. 26.01.2017
  • Таким образом, заголовок запроса неверен, две исходные таблицы больше не существуют (о чем вы забыли нам сообщить), и вы показываете запрос, который не может работать, потому что таблицы не существует (о чем вы должны были знать, но вы даже не удосужились сообщить нам, что запрос не выполняется). В следующий раз, пожалуйста, не давайте такой бессвязной информации, чтобы снова не тратить наше время. 26.01.2017
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..