使用计算字段连接同一个表会返回“重复”行 [关闭]

Posted

技术标签:

【中文标题】使用计算字段连接同一个表会返回“重复”行 [关闭]【英文标题】:Joining the same table with calculated fields returns "duplicated" rows [closed] 【发布时间】:2021-11-24 04:07:54 【问题描述】:

我必须加入同一张表才能将每一行的某些字段与同一张表的其他字段相加。

问题是我将第 1 行与第 2 行相加,但是当查询达到第 2 行时,它给了我另一行,它将第 2 行与第 1 行相加。

例子:

TABLE

 id       client      quantity

  1       john            2
  2       dave            6
  3       carl            4
  4       david           3

我加入同一张表以获得每行的数量总和,但结果给了我

TABLE

idClient1   idClient2  quantity1   quantity2     sum
   
   1           2          2            6          8  
   2           1          6            2          8   
...     

在这种情况下,第一行的总和为 idClient1 = 1 + idClient2 = 2,因此我不需要总和 idClient1 = 2 + idClient2 = 1,因为第二行等于第一行。

如何避免该查询给我 2 倍相同的 IdClient1 和 idClient2 总和?

【问题讨论】:

请添加您的示例的预期结果。说出你想要什么并不容易。 我想要的结果是避免第二行,因为第一行是一样的。在没有“开”条件的情况下加入同一个表每一行都加入了所有行,这是我需要比较某个字段的总和,但问题是第 1 行与第二行加入,所以我有 Sum ti 比较,但是Aldo 第二排与第一排连接,我有相同的 Sum Teo 时间 【参考方案1】:

你可以这样做:

select
  a.client as client1, 
  b.client as client2,
  a.quantity as quantity1,
  b.quantity as quantity2 
from my_table a
join my_table b on a.client < b.client

结果:

 client1  client2  quantity1  quantity2 
 -------- -------- ---------- --------- 
 david    john     3          2         
 carl     john     4          2         
 dave     john     6          2         
 carl     dave     4          6         
 carl     david    4          3         
 dave     david    6          3         

请参阅db<>fiddle 的运行示例。

键在连接谓词中。它使用不等式过滤掉对称对。

【讨论】:

这解决了我的问题,我得到了原始查询的一半结果,所以重复的结果消失了!谢谢老哥,今天我有新技能了!

以上是关于使用计算字段连接同一个表会返回“重复”行 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用表类型连接表会减慢计算速度?

使 SQL 查询返回重复行而不使用 UNION ALL 关闭

为啥用户代理样式表会覆盖我的样式? [关闭]

计算重复字段连接的结果

如何根据计算值字段选择行[重复]

当输入字段为空时,Javascript 计算返回 NaN [重复]