sql - 组合具有两个相同值的相似行
问题描述
我有三个表:用户、产品和评论。我正在尝试形成一个表格,该表格将显示从不同用户那里获得相同评论的产品、评论它的用户以及它得到了什么评论。这是我正在寻找的表格和输出:
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
解决方案
这里有一些过于复杂的答案。
使用这样的自连接非常简单:
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
推荐阅读
- c++ - 我如何显示所有在第 8 个基数(数字基数为 8?)中具有 4 位表示的数字?
- python - shutil.copy2 给出“SameFileError” altho 文件根本不一样 - 为什么?
- c++ - LLVM C++ API 是否比构建 IR 文件并提供给 llc 的字符串更好?
- python - 如何从 numpy.fft.rfft 返回 float32 值?
- java - 当我按下按钮时,它总是复制 jTable 上的现有记录
- python - 查找两列之间的唯一值
- javascript - 给定一个数组,如 [[el1,el2],[el11,el22],[el111,el222]]..... 当第一个值相等时,迭代并求和子数组的第二个值
- api - 从docusign REST API 收集与安全相关的事件?
- python - Django url 按类别 slug
- excel - VBA用字符串中的空格替换换行符(Enter)