首页 > 解决方案 > 删除重复的反向对

问题描述

我正在制作一个包含所有产品 SKU(fj1_sku 列)的表格,并根据一系列标准与第二个产品的产品 SKU 配对,该产品是该产品的紧密替代品(fj2_sku 列)。为了获得主矩阵,我已经完成了 final_join 表与自身的交叉连接。

我无法弄清楚如何删除结果表中的镜像重复对:

fj1_sku fj2_sku
10 11
11 10

即我只想要一对 11 和 10 的一排。

我已经尝试了在这个平台上找到的许多解决方案,但不想使用“选择不同的”,因为我需要许多我不能使用不同的变量。

这是我到目前为止的代码:

select 
  fj1.sku as fj1_sku,
  fj2.sku as fj2_sku,
  fj1.name as fj1_name,
  fj2.name as fj2_name,
  fj1.brand as fj1_brand,
  fj2.brand as fj2_brand
from final_join as fj1
cross join final_join as fj2
where (fj1.sku <> fj2.sku) and (fj1.brand <> fj2.brand)

标签: sql

解决方案


如果所有对都有重复项,则可以使用:

select t.*
from t
where fj1_sku < fj2_sku;

如果没有,您可以使用更具选择性:

select t.*
from t
where t.fj1_sku < t.fj2_sku or
      not exists (select 1
                  from t t2
                  where t2.fj1_sku = t.fj2_sku and
                        t2.fj2_sku = t.fj1_sku
                 );

delete如果您确实想更改表,也可以将类似的逻辑合并到 a中。


推荐阅读