За последние 24 часа нас посетили 10109 программистов и 717 роботов. Сейчас ищут 198 программистов ...

Помощь с запросом

Тема в разделе "MySQL", создана пользователем marlin, 14 сен 2021 в 18:32.

  1. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    57
    Симпатии:
    2
    Приветствую.
    Есть таблица "студент"
    Id name

    Таблица "предмет"
    Id name

    И таблица связи один ко многим - предметы студента
    Id_student id_lesson

    Как бы мне отфильтровать студентов, чтобы показались только те, у кого есть один из предметов?

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

    Если просто left join делать с таблицы студентов с таблицей связи то много же строк дублей пойдёт, distinct что ли нужен.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    2.894
    Симпатии:
    555
    Адрес:
    Татарстан
    Или group by
     
    don.bidon нравится это.
  3. don.bidon

    don.bidon Новичок

    С нами с:
    28 мар 2021
    Сообщения:
    270
    Симпатии:
    37
    или голову включать, рано или поздно что-то сработает
     
  4. Slava Rozhnev

    Slava Rozhnev Новичок

    С нами с:
    6 сен 2021
    Сообщения:
    4
    Симпатии:
    0
    Попробуйте так:

    Код (Text):
    1. select * from students
    2. where exists (
    3.     select 1 from students_lessonss
    4.       join lessonss on lessonss.Id = students_lessonss.Id_lesson
    5.       where
    6.           students_lessonss.Id_stident = students.Id and
    7.           lessonss.Name in ('Mathematics', 'Phisics')
    8. );
    SQL fiddle
     
  5. marlin

    marlin Новичок

    С нами с:
    19 июн 2019
    Сообщения:
    57
    Симпатии:
    2
    Я смотрю что если в select указать только столбцы от student то и так работает:

    Код (Text):
    1. select distinct s.* from students s left join students_lessonss sl on s.id=sl.Id_stident where sl.Id_stident in (1,2);
    По умолчанию orm звездочку подставляет в select, поэтому не тот результат давало.
    Но я бы так не хотел на будущее делать, новые приджойненные столбцы могут понадобиться, но для этого также есть решение без подзапросов