【发布时间】:2015-07-12 15:52:22
【问题描述】:
我已经开始阅读 SQL,目前正在阅读 Head First SQL 书,我正在使用 MySQL。我已经到了解释如何使用外键创建新表并将数据从单个表移动到新表的地步。没有提到的是如何在旧表中创建外键并为其分配fk数据。这些是表格:
my_contacts:
FirstName
LastName
Profession
电话
Profession:
Prof_ID PK
Profession
所以我所做的就是在 my_contacts 中添加一个名为 Prof_ID 的附加列,并用
填充它UPDATE my_contacts SET prof_id = (
SELECT prof_id FROM my_contacts WHERE my_contacts.profession = profession.profession
);
这可以完美匹配 2 个表中的职业名称并填充 my_contacts.prof_id。之后,我在此列上创建了一个约束和一个 FK,并删除了 my_contacts.profession。
我很难理解语句的运行方式。从我读过的 SQL 过程中,除非明确告知要使用 order by 和 group by 来做其他事情,否则它想要的语句是怎样的。那么为什么该语句匹配正确呢?我正在努力理解它是如何在数据中运行的,与像 C# 这样的语言不同,我知道事件发生的顺序。这像循环语句吗?
感谢您的宝贵时间。
【问题讨论】:
-
UPDATE语句有错别字吗?你是说
UPDATE my_contacts SET prof_id = ( SELECT prof_id FROM职业WHERE my_contacts.profession = profession.profession);吗? -
你的问题得到解答了吗?