sql - 从旧表迁移到新表时遇到问题
问题描述
我正在将数据从一个表传输到另一个表。
旧表曾经有一个名为 City 的 varchar 列。
新表而不是城市名称,有一个名为 CityId 的 int 列,因为我只为 Cities 创建了一个新表。
我的城市表具有以下列:
CityID - PK
RegionID - FK
CityName - Varchar(50)
我正在运行此查询来复制新表的旧数据:
INSERT INTO dbo.Client(EmailAddress, CityID)
a.EmailAddress, (SELECT CityID FROM Cities WHERE CityName collate SQL_Latin1_General_CP1_CI_AS = a.City)
FROM AdventureWorksOld.dbo.Client a
但我不能这样做,因为子查询返回多行:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
如何修复我的代码,以便我可以执行以下操作:
SELECT (SELECT CityName FROM Cities WHERE CityName = 'Oak Bay') -> Replace 'Oak Bay' with the text in the column
FROM AdventureWorksOld.dbo.Client
谢谢你。
解决方案
尝试这个:
INSERT INTO dbo.Client(EmailAddress, CityID)
SELECT
a.EmailAddress
, c.CityID
FROM AdventureWorksOld.dbo.Client a
OUTER APPLY (SELECT TOP 1 c.CityID FROM Cities c WHERE c.CityName = a.City) c
推荐阅读
- after-effects - sourceText 值是根据当前时间指示器的图层索引号
- tableau-api - Tableau - 我在“对象”部分看不到“扩展”
- python - 在 Python 中检索 cmd 行参数
- android - 如何将radiogroup值从片段传递给活动?
- haskell - 证明 GHC 的类型不等式
- rpm-spec - rpm -e 因 rpmspec 文件中的 unpre 脚本错误而失败
- selenium - 在 Python 中使用 Selenium 进行网页抓取
- python - 将帮助页面检索到文件
- asp.net-core - 在一个控制器上强制执行 https,在另一个控制器上强制执行 http
- javascript - 为什么 Ajax 没有命中 webmethod 函数?