【发布时间】:2023-03-13 12:12:01
【问题描述】:
我猜标题没有很好地解释这个问题,但让我们看一个例子,我有以下表格:
orders table:
order_id
9
10
11
12
order_details table:
order_id, product_id
9, 7
9, 8
10, 5
10, 6
11, 6
11, 7
12, 8
12, 9
products table:
product_id, product_name, price, ext_id
5, poteto, 4.99, null
6, potato, 7.5, 55
7, orange, 7.99, 77
8, green apple, 5.99, 88
9, gren-aple, 6.99, null
products_old table:
product_id, key, value
5, product name, poteto
5, price, 4.99
5, external id, 55
9, product name, gren-aple
9, price, 6.99
9, external id, 88
如果产品名称相同,我想查找具有重复产品的订单(只有不同的 product_id 但相同的 external_id),使用以下查询将很容易:
select od.order_id
from order_details od join
products p
on od.product_id = p.product_id
group by od.order_id
having count(p.product_name) > count(distinct p.product_name)
但是当名称不同时如何处理它(例如一些拼写错误等)但是我有一个额外的表,其中 external_id(对于相同的产品是相同的,例如青苹果和 gren-aple)存储为如上所示? 请注意,只有具有空 ext_id 的重复项才在表 products_old 中。 非常感谢您的帮助:)!
【问题讨论】:
-
考虑在查找(主)表中为每个
product_name保留唯一的product_id,例如1-potato 2-orange 3-green apple .....。并且不要将product_names 作为字符串保存在子表中,而是将它们保存为从查找表派生的整数参考值。 -
我需要在不改变表结构的情况下解决这个问题
-
设计问题将来会成为头疼的问题,最好从一开始就解决:)
标签: sql postgresql select