【发布时间】:2021-04-08 10:02:59
【问题描述】:
我的数据库中有三个表:
- 具有属性(skillid、属性 1、属性 2、属性 3)的 HASSKILLS - skillid 是 SKILLS 的主键和外键
- OLDHASSKILLS 具有属性(描述,属性 1,属性 2,属性 3) - 描述 是主键
- 具有属性的技能 (skillid, description) - skillid 是主键
SKILLS 中的每个 skillid 对单个描述都是唯一的(例如“3”、“可以爬树”)
我创建了 HASSKILLS 表,它最终将替换我的 OLDHASSKILLS,因为我想引用并使用 skillid 来引用 SKILLS,而不是描述。
OLDHASSKILLS 和 SKILLS 都填充了数据,我的 HASSKILLS 也填充了,除了 skillid。
我想用新的 HASSKILLS 表中的相应 skillid 值有效地替换所有 description 值。
我已经尝试通过使用 INSERT INTO 语句和嵌套查询来做到这一点。
INSERT INTO HASSKILLS(SkillId)
SELECT SkillId
FROM SKILLS
WHERE
(SELECT d1.description, d2.description
FROM OLDHASSKILLS d1, SKILLS d2
WHERE d1.description = d2.description);
我的“WHERE (SELECT”) 有问题,错误子查询必须只返回一列。
我的 SQL 语句是否出错,或者有更好的方法吗?
【问题讨论】:
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(差不多 30 年前),不鼓励使用它 -
有道理,谢谢
标签: sql postgresql join nested sql-insert