首页 > 解决方案 > 组合具有两个相同值的相似行

问题描述

我有三个表:用户、产品和评论。我正在尝试形成一个表格,该表格将显示从不同用户那里获得相同评论的产品、评论它的用户以及它得到了什么评论。这是我正在寻找的表格和输出:

Users  
uid  uname
1    name1  
2    name2  
3    name3  
4    name4

Products
pid  pname  
1    A  
2    B  
3    C  
4    D  

Reviews   
pid  uid  grade  
1    1    3  
1    2    2  
1    3    3  
2    1    4  
3    2    1  
2    2    4  
4    3    1  

期望的输出:

uname  uname2  pname  grade  
name1  name3   A      3  
name3  name1   A      3  
name1  name2   B      4  
name2  name1   B      4

标签: sqlpostgresql

解决方案


这里有一些过于复杂的答案。

使用这样的自连接非常简单:

select u1.uname, u2.uname, p.pname, r1.grade
from review r1
join review r2 on r2.pid=r1.pid and r2.grade=r1.grade and r2.uid<>r1.uid
join products p on p.pid=r1.pid
join users u1 on u1.uid=r1.uid
join users u2 on u2.uid=r2.uid
order by pname, r1.grade, u1.uname, u2.uname

结果:

uname   uname1  pname   grade
name1   name3   A       3
name3   name1   A       3
name1   name2   B       4
name2   name1   B       4

推荐阅读