You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"算同一组,只返回一次)。

思路拆解:

  1. 自连接Rating表,找到两个不同评审者对同一部电影的评分记录
  2. 关联Reviewer表,把rID转换成对应的姓名
  3. 用r1.rID < r2.rID过滤掉重复对和自己和自己的无效组合
  4. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:12:48