2010-10-28 2 views
0

entires У меня есть, equipments, brands, times и seasons.Мне нужно завершить эту многоуровневые таблицы MySQL JOIN

записи:

  • ID
  • время
  • equipment_1
  • equipment_2

оборудование:

  • ID
  • id_brand

бренды:

  • идентификатор
  • имя

раз:

  • ID
  • id_season

сезонов:

  • ID
  • имя

Мой фактический SQL-запрос является:

SELECT entries.*, times.id_season AS id_season 
FROM entries, seasons 
WHERE entries.time = times.id 

Но в конечном запросе мне нужна следующая информация, которую я не знаю, как получить его:

  1. Имени для каждого entries.equipment_ как equipment_1_name и equipment_2_name, который установлен в брендах. имя.
  2. Название сезона как season_name.

Заранее спасибо!

ответ

2

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

SELECT 
    entries.*, 
    times.id_seasons AS id_season, 
    b1.name AS equipment_1_name, 
    b2.name AS equipment_2_name, 
    seasons.name AS season_name 
FROM entries 
LEFT JOIN equipments AS equipments_1 
    ON equipments_1.id = entries.equipment_1 
LEFT JOIN brands AS brands_1 
    ON brands_1.id = equipments_1.id_brand 
LEFT JOIN equipments AS equipments_2 
    ON equipments_2.id = entries.equipment_2 
LEFT JOIN brands AS brands_2 
    ON brands_2.id = equipments_2.id_brand 
LEFT JOIN times 
    ON times.id = entries.time 
LEFT JOIN seasons 
    ON seasons.id = times.id_season;