За последние 24 часа нас посетили 30509 программистов и 1792 робота. Сейчас ищут 1129 программистов ...

Задачка для гуру MySQL

Тема в разделе "MySQL", создана пользователем triaffer, 19 май 2007.

  1. triaffer

    triaffer Активный пользователь

    С нами с:
    5 май 2007
    Сообщения:
    13
    Симпатии:
    0
    Всем привет!
    Два дня бьюсь над запросом выборки и вот решил на третий обратиться к профессионалам :)
    Задача такая: выбрать из трех таблиц данные.

    Таблица первая: pupils
    Поля:
    id int(10) auto_increment
    first_name varchar(50)
    middle_name varchar(50)
    last_name varchar(50)
    forms_id int(10) //id класса

    Таблица вторая: forms
    id int(10) auto_increment
    name varchar(255)

    Таблица третья: results
    id int(10) auto_increment
    pupils_id int(10) // id ученика
    themes_id int(10) //id темы
    date varchar(50)
    result varchar(150)

    Вкратце:
    В таблицу results помещаются результаты учеников по контрольным
    Таблица forms содержит классы (10-А, 11-Б и тд)
    Таблица pupils - данные об учениках

    Задача: написать запрос выборки из таблиц, содержащий:
    только те результаты из results, для которых тема themes_id="23"
    , ФИО учеников, а ученики учаться к примеру в классе с id="5"

    вот что я написал:

    [sql]select
    pupils.first_name, pupils.middle_name, pupils.last_name, results.result, results.date
    from
    results, pupils
    where results.pupils_id in (select id from pupils where forms_id="5") and results.pupils_id=pupils.id and results.themes_id="23"
    order by pupils.first_name;[/sql]

    Результат - выводит те значения, что надо, но многократно повторяющиеся.

    Подскажите что к чему
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    [sql]SELECT pupils.first_name, pupils.middle_name, pupils.last_name, results.result, results.date
    FROM pupils
    LEFT JOIN results ON results.pupils_id = pupils.id
    LEFT JOIN forms ON forums.id = pupils.forms_id
    WHERE forms.forms_id = 5 AND results.themes_id = 23
    ORDER BY pupils.first_name;[/sql]