假设我有一个表产品,我还有3-4个其他表(评论,图片,订单等)连接到具有一对多关系的产品。
如何以简单的方式从其他表(评论,图片,订单)中选择一个产品及其连接的条目?
我尝试使用左连接连接其他表但我得到重复的条目。如果我想选择许多产品而不是一个产品,情况也会变得更糟。
我还想到每个相关表的一个查询,但这不是太慢了吗?
答案 0 :(得分:1)
如果我理解正确,你可以 1产品 对该产品的4条评论 10张图片和 5个订单 如果您进行左连接,则会获得4 * 10 * 5 = 200个结果,其中包含大量重复的注释,图片和订单。但是每个评论,图片和订单只需要一行。
您需要为每个相关表单独查询。如果有办法解决这个问题,那么它将比单独的解决方案更复杂,更慢。
答案 1 :(得分:1)
您没有获得重复的行,您获得了执行一对多联接的正确结果。
阅读: http://en.wikipedia.org/wiki/Relational_algebra#Joins_and_join-like_operators http://dev.mysql.com/doc/refman/5.0/en/join.html
如果您希望每个产品条目占一行,请考虑使用聚合函数
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
select product.id, product.name, group_concat(comment.text), avg(rating.value)
from product
left join comment on comment.product_id=product.id
left join rating on rating.product_id=product.id
group by product.id, product.name