2013-05-07 5 views
-1

Пожалуйста, кто-нибудь может объяснить, как я собирался построить SQL-запрос для объединения таблиц в прикрепленном изображении. Я новичок в разработке базы данных веб-& и борется с ним в течение нескольких дней !! [таблицы] [1]SQL-помощь, соединяющая несколько таблиц

http://i44.tinypic.com/9863c0.jpg

Идея позади этого: может быть много магазинов и много продуктов, каждый из которых магазин может продавать те же самые продукты, что и другие магазины, поэтому необходимо, чтобы таблица называлась «магазин: продукт». Я также учитывал размер и цвет полей в 2 других таблицах, чтобы сэкономить место и повысить производительность. Как связать все вместе, чтобы сервер базы данных возвращал имя магазина и продукты, которые он продает (включая размер и цвет продукта), когда я запрашиваю конкретный идентификатор магазина?

Спасибо! :)

ответ

0

Пожалуйста, проверьте его:

SELECT s.name, p.name, si.size, c.colour 
FROM shops s 
INNER JOIN product sp ON (sp.shop_id = s.id) 
INNER JOIN products p ON (p.prod_id = sp.prod_id) 
INNER JOIN sizes si ON (si.id = p.size) 
INNER JOIN colours c ON (c.id = products.colour) 

Пример 2:

SELECT s.name, p.name, 
    GROUP_CONCAT(si.size) AS sizes, 
    GROUP_CONCAT(c.colour) AS colours 
FROM shops s 
INNER JOIN product sp ON (sp.shop_id = s.id) 
INNER JOIN products p ON (p.prod_id = sp.prod_id) 
LEFT JOIN sizes si ON (si.id = p.size) 
LEFT JOIN colours c ON (c.id = products.colour) 
GROUP BY s.id, p.id 

Важные соображения:

  • Вы должны в вашей продукции таблицы имеют size_id и colour_id вместо размера и цвет соответственно.
  • Не уверен, что все продукты имеют размеры и цвет, если нет, пожалуйста, подумайте о том, чтобы переключить внутренние соединения для этих двух на LEFT JOIN;
  • Вы должны изменить название таблицы продуктов для shop_product;
  • Название таблиц должно быть в единственном числе не множественное (не обязательство);
  • Вы могли бы также группа по магазину и продукту и имеют цвета и столбцы размера каскадный (например. 2)
+0

Спасибо, Медина, только то, что я искал. Ваше первое решение сработало. :) – Juned

Смежные вопросы