Запрос не возвращает NULL

Тема в разделе "Базы данных", создана пользователем Q_BASIC, 8 окт 2019.

Модераторы: latteo
  1. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    482
    Симпатии:
    1.184
    Приветствую,

    Что-то не понимаю, что делаю не так. Есть таблицы SUBJECTS, SUBJECTS_ON_GROUPS

    Задача:
    Посмотреть какие предметы установлены каким группам, если предмет не установлен, вывести "-"

    Код:
    SELECT SUBJECTS.NAME, SUBJECTS_ON_GROUPS.GROUP_ID
    FROM SUBJECTS
    JOIN SUBJECTS_ON_GROUPS ON SUBJECTS_ON_GROUPS.SUBJECT_ID = SUBJECTS.ID
    
    Этот запрос выводит только предметы которые установлены, а как получить что предмет не установлен в рамках запроса?

    Скажем есть предмет А в таблице SUBJECTS, в SUBJECTS_ON_GROUPS для него строк нет. Как вывести в результате

    SUBJECT | GROUP_ID
    A | NULL
     
  2. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    235
    Симпатии:
    88
    Q_BASIC нравится это.
  3. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    482
    Симпатии:
    1.184
    2 запроса ты имеешь в виду select from + left join?

    С join и проблемы у меня, не возвращает NULL, можешь подсказать как его сделать?
     
  4. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    235
    Симпатии:
    88
    Код:
    SELECT subjects.name,subjects_on_groups.subject_id FROM subjects LEFT JOIN subjects_on_groups ON subjects.id = subjects_on_groups.subject_id;
    upload_2019-10-9_16-17-56.png
     
    Q_BASIC нравится это.
  5. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    482
    Симпатии:
    1.184
    Возможно не так объясняю
    http://prntscr.com/ph34bl

    В таблице для группы 101 не установлен предмет физика, надо чтобы результат запроса это показал как-то
     

    Вложения:

    • data.zip
      Размер файла:
      1.012 байт
      Просмотров:
      2
  6. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    235
    Симпатии:
    88
    Я думаю без пыхи это уже будет какое то сложное решение через процедуры, т.к. SQL не может знать что тебе нужно взять каждый элемент первой таблицы и прокручивать его по наличию второго, причем если второго нету - то писать нулл.
    Вынеси логику в обработчик и всё.
     
    Q_BASIC нравится это.
  7. JohnMagic

    JohnMagic Писатель

    Регистр.:
    2 сен 2015
    Сообщения:
    5
    Симпатии:
    0
    Можно попробовать с помощью оператора UNION сделать такую выборку