SQL技术求助:将ID表转换为名称表及评审者对查询练习
嘿,我来帮你搞定这两个SQL问题,一步步拆解给你看~
1. 将ID表转换为名称表
这个需求本质上就是通过关联查询,把表中的ID字段替换成对应的名称值,核心是利用JOIN操作关联存储名称的维度表(比如你的Reviewer或Movie表)。
举几个实用例子:
- 如果你有一个只包含评审者ID(rID)的表/查询结果,要转换成对应的姓名表:
-- 假设原ID表是temp_rids(rID),转换为姓名表 SELECT r.name FROM temp_rids t JOIN Reviewer r ON t.rID = r.rID;
要是想保留原ID同时新增名称列,把SELECT r.name改成SELECT t.rID, r.name就行。
- 如果是电影ID转电影名称,就关联
Movie表:
SELECT m.title FROM temp_mids t JOIN Movie m ON t.mID = m.mID;
2. 查询对同一部电影均给出评分的评审者对(返回姓名)
这个需求的核心是找到两两不同的评审者,他们至少有一部共同评分的电影,同时要避免重复的对(比如"A和B"与"B和A"算同一组,只返回一次)。
思路拆解:
- 自连接
Rating表,找到两个不同评审者对同一部电影的评分记录 - 关联
Reviewer表,把rID转换成对应的姓名 - 用
r1.rID < r2.rID过滤掉重复对和自己和自己的无效组合 - 用
DISTINCT去重,避免同一对评审者因多部共同评分电影重复出现
最终SQL语句:
SELECT DISTINCT rev1.name AS reviewer1, rev2.name AS reviewer2 FROM Rating r1 JOIN Rating r2 ON r1.mID = r2.mID -- 确保是同一部电影 AND r1.rID != r2.rID -- 排除评审者自己给自己评分的情况 AND r1.rID < r2.rID -- 避免重复的评审者对(比如A&B和B&A) JOIN Reviewer rev1 ON r1.rID = rev1.rID JOIN Reviewer rev2 ON r2.rID = rev2.rID;
关键细节说明:
r1.rID < r2.rID是避免重复对的核心,这样每个唯一的评审者对只会被返回一次DISTINCT用来处理同一对评审者共同评分多部电影的场景,防止结果里出现重复的姓名对
内容的提问来源于stack exchange,提问作者Bruce Yan
相关产品推荐
相关产品推荐

