【问题标题】: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 时间

标签: mysql sql join


【解决方案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 的运行示例。

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

【讨论】:

  • 这解决了我的问题,我得到了原始查询的一半结果,所以重复的结果消失了!谢谢老哥,今天我有新技能了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
相关资源
最近更新 更多