postgres 加入同一张表

ald*_*ldr 3 sql postgresql

我有一张看起来像这样的桌子

years  type     value    x      y
1      b        3.74637  false  true
1      b        -0.52816 true   false
1      mon1     0        true   false
1      mon1     0        false  true
1      mon10    0.00413  true   false
1      mon10    0.00137  false  true
Run Code Online (Sandbox Code Playgroud)

我希望桌子看起来像

years  type     x        y
1      b        3.74637  -0.52816
1      mon1     0        0
1      mon10    0.00413  0.00137
Run Code Online (Sandbox Code Playgroud)

因此我创建了一个请求,我在其中加入表格本身

SELECT 
     i.years, 
     i.type, 
     i.value as b, 
     j.value as m 
from abc as i 
inner join abc as j on i.type = j.type AND i.years = j.years 
WHERE i.type = j.type AND i.m = j.b 
Run Code Online (Sandbox Code Playgroud)

现在我明白了

years   type    x        y
1       b       3.74637  -0.52816
1       b       -0.52816 3.74637
1       mon1    0        0
1       mon1    0        0
1       mon10   0.00413  0.00137
1       mon10   0.00137  0.00413
Run Code Online (Sandbox Code Playgroud)

如何摆脱一行的 x 值等于下一行的 y 的双峰

Mic*_*bay 6

您不需要做任何额外的事情,只需在连接上添加一些额外的约束即可。您真的不想执行子查询,因为会无缘无故地影响性能。

 SELECT 
   i.years, 
   i.type, 
   i.value as b, 
   j.value as m 
 from abc i
 inner join abc j on i.type = j.type and i.x = true and j.y = true;
Run Code Online (Sandbox Code Playgroud)