【发布时间】:2021-11-08 21:12:03
【问题描述】:
我有 4 张桌子:
- 项目
- 购买
- 购买物品
- 购买折扣
在这些表中,Purchase Discount 有两个条目,所有其他的只有一个条目。但是当我查询它们时,由于LEFT JOIN,我得到了重复的条目。
此查询将在大型数据库中运行,我听说使用DISTINCT 会降低性能。有没有其他方法可以在不使用DISTINCT 的情况下删除重复项?
这里是SQL Fiddle。
结果显示:
[{"item_id":1,"purchase_items_ids":[1234,1234],"total_sold":2}]
但结果应该是:
[{"item_id":1,"purchase_items_ids":[1234],"total_sold":1}]
【问题讨论】:
-
从小提琴的外观来看,甚至没有理由在那里使用左连接,因为您甚至没有真正使用表。加入那里的目的是什么?
-
是的,我们必须接受,因为我从 purchase_discounts 表中获取折扣金额。我会在小提琴中更新。谢谢@Padagomez
-
“所以我听说 DISTINCT 会降低性能” - 我会首先衡量 DISTINC 对性能的影响,然后寻找解决方案。也许你正在解决不存在的问题。 Tag [mysql] 这里需要吗?
-
只是一个问题——你能改变数据库设计吗?我可以就我认为它如何更好地工作提出一些想法,但据我所知(这只是我的意见,我在这里的排名相当低,所以请把它当作意见)你不会能够规避这个问题,而无需让您的数据库设计有所不同。如果这是一个选项,请告诉我,我很想有机会写下来
-
小提琴很棒。但也请在问题中添加表定义和查询字符串。这是推荐的方式。当外部链接失效时,更易于阅读且不易受到 bitrot 的影响。
标签: sql json postgresql many-to-many left-join