如何将 SQL 中的信息从一个表复制到另一个表
Posted
技术标签:
【中文标题】如何将 SQL 中的信息从一个表复制到另一个表【英文标题】:How to copy information in SQL from one table to another 【发布时间】:2021-03-28 19:20:29 【问题描述】:我需要构建一个查询以将一个表中的列中的信息复制到另一个表中的列。
这就是表格的样子:
人:
PersonId | Name | StatusId |
---|---|---|
1 | John | |
2 | Jenny | |
3 | Steve |
作业:
AssignmentId | Country | PersonId |
---|---|---|
1 | UK. | 1 |
2 | USA | 3 |
状态:
StateId | Name |
---|---|
1 | Busy |
2 | Free |
People 和Assignments 表之间存在关系:Assignments 表上的PersonId 是一个外键。 People 表通过 FK StatusId 与 Status 表建立关系。如果表 People 中的人员存在于表 Assignments 中,我需要做的是使用表 Status 中的 StatusId 填充表 People 上的 StatusId。 在上面的示例中,John 和 Steve 都在 Assignments 表中,在这种情况下,他们在表 People 上的 StatusId 应该设置为 1。
我试图这样做:
update People
set StatusId = 1
where PersonId IN (
select PersonId
from Assignments
where Assignments.PersonId = People.PersonId
)
但正如您所见,我正在对 StatusId 进行硬编码,这将不起作用。有什么方法可以根据选择的结果获取 StatusId 吗?还是有其他方法可以获取 StatusId?
【问题讨论】:
用您正在使用的数据库标记您的问题。我不听你的问题。 【参考方案1】:如果你想通过“名称”来引用它,你可以使用子查询:
update People
set StatusId = (select s.StatusId from status s where name = 'Busy')
where PersonId IN (select a.PersonId from Assignments a where a.PersonId = People.PersonId);
【讨论】:
谢谢!!有效。我不知道可以在“=”右侧使用选择语句而不是列名。再次感谢! @AmericoPerez 。 . .这称为标量子查询(在这种情况下,它是相关标量子查询)。这样的子查询——返回一列最多一行——可以在大多数可以使用常量的地方使用。以上是关于如何将 SQL 中的信息从一个表复制到另一个表的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 中将索引从一个表复制到另一个表