-1

请有人帮忙解释一下我将如何构建一个 SQL 查询来连接所附图像中的表。我是网络和数据库设计的新手,已经为此苦苦挣扎了好几天!![tables][1]

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

它背后的想法是:可以有很多商店和很多产品,每个商店都可以销售与其他商店相同的产品,因此需要名为“shop:product”的表。为了节省空间并提高性能,我还将字段大小和颜色分解到另外 2 个表中。如何将它们链接在一起,以便数据库服务器在我查询特定商店 ID 时返回商店名称和它销售的产品(包括产品尺寸和颜色)?

谢谢!:)

4

1 回答 1

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 而不是 size 和 color。
  • 不确定是否所有产品都有尺寸和颜色,如果没有,请考虑将这两个的内连接切换为左连接;
  • 您应该更改 shop_product 的产品表名称;
  • 表的名称应该是单数而不是复数(不是义务);
  • 您还可以按商店和产品分组,并将颜色和尺寸列连接起来(示例 2)
于 2013-05-08T00:11:54.983 回答