За последние 24 часа нас посетили 17732 программиста и 1721 робот. Сейчас ищут 886 программистов ...

Сформировать запрос.

Тема в разделе "MySQL", создана пользователем X-man, 3 окт 2013.

  1. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    Есть 2 связанных таблицы:
    teams(
    `team_id` int(3),
    `name` varchar(30)
    )
    и calendar
    (
    `id` int(10),
    `date` date,
    `team1_id` int(3),
    `team2_id` int(3)
    )
    team1_id и team2_id - внешние ключи к teams.team_id.
    На выходе нужна таблица вида
    id | date | name1 | name2
    Первым запросом выбираю записи из calendar, вторым и третьим достаю соответствующие имена из teams.
    Можно ли одним запросом получить нужные записи?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно.
    select calendar.*, teams.name join on calendar.team1 = teams.id

    Добавлено спустя 41 секунду:
    хм, чета я забыл как выходить из таких ситуаций. надо сделать AS

    Добавлено спустя 2 минуты 10 секунд:
    select calendar.*, teams1.name, teams2.name from calendar
    join teams AS team1 on calendar.team1 = team1.id
    join teams AS team2 on calendar.team2 = team2.id
     
  3. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    igordata, сработал этот вариант.
    Только я сейчас обнаружил, что у меня ситуация еще сложнее, между таблицами есть еще одна связующая таблица members:
    teams(
    `team_id` int(3),
    `name` varchar(30)
    )
    members
    (
    `id` int(3),
    `team_id` int(3)
    )
    calendar
    (
    `id` int(10),
    `date` date,
    `member1_id` int(3),
    `member2_id` int(3)
    )
    и мне важно сохранить структуру таблиц такой... Можно здесь как-то выкрутиться?
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    select calendar.*, member1.name, member2.name from calendar
    join members AS member1 on calendar.member1 = member1.id
    join members AS member2 on calendar.member2 = member2.id
    join teams AS team1 on member1.team = team1.id
    join teams AS team2 on member2.team = team2.id
     
  5. X-man

    X-man Новичок

    С нами с:
    17 май 2013
    Сообщения:
    19
    Симпатии:
    0
    igordata, грандреспект :)