SQL连接一对多 - 多个表

时间:2015-05-13 21:06:02

标签: mysql

我有一个带有表格'项目的MySQL数据库。

每件商品的价格都可以有多种价格。表格和图像中的多个图像'表。他们都与物品有一对多的关系。

我喜欢有一个查询可以立即获取所有数据,但是在我提出的查询中,我得到了很多重复记录。如果一个项目有3个价格和3个图像,我会得到9个项目(而不是所需的6个):

我的查询:

SELECT * FROM items 
LEFT JOIN prices 
    ON items.item_id = prices.item_id 
LEFT JOIN images 
    ON items.item_id = images.item_id 
ORDER BY items.item_id

E.g。我很想拥有:

itemid
  1    item1          price1              NULL
  1    item1          price2              NULL
  1    item1          price3              NULL
  1    item1           NULL              image1
  1    item1           NULL              image2
  1    item1           NULL              image3
  2    item2 ....

2 个答案:

答案 0 :(得分:2)

这里最好的选择是UNION查询:

    SELECT items.item_id, items.item_name, prices.price, CAST(NULL AS VARCHAR(100)) as image
    FROM items 
    LEFT JOIN prices 
        ON items.item_id = prices.item_id 

    UNION ALL

    SELECT items.item_id, items.item_name, NULL, images.image
    FROM items 
    LEFT JOIN images 
        ON items.item_id = images.item_id 

这会将每个查询堆叠在一起,这就是为什么在第一个查询中需要CAST()作为最终将堆叠在同一列中的图像数据的占位符。您可能必须更改该VARCHAR(100)以匹配您正在提取的图像列中的任何数据类型。此外,您可能必须更改字段名称,因为我看不到您的架构。

答案 1 :(得分:0)

仅尝试使用join而非left join,如下所示:

SELECT * FROM items 
JOIN prices 
    ON items.item_id = prices.item_id 
JOIN images 
    ON items.item_id = images.item_id 
ORDER BY items.item_id