我有一个带有表格'项目的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 ....
答案 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