INSERT SELECT 语句只有一列用于 SELECT
Posted
技术标签:
【中文标题】INSERT SELECT 语句只有一列用于 SELECT【英文标题】:INSERT SELECT statement with only one column for SELECT 【发布时间】:2020-07-22 16:36:52 【问题描述】:我正在使用 SQL Server Management Studio 18,并且我有以下表格,其中包含以下列:
表A
[ID]
[Name]
[InternalEmplID]
表B
[ID]
[InternalEmplID]
[Month]
[Year]
我想在 TableB 中创建一个INSERT SELECT
,可能类似于以下内容:
INSERT INTO TableB
(InternalEmplID, Month, Year)
VALUES
((SELECT InternalEmplIDFROM TableA WHERE Name = 'John Smith'), 'July', '2020')
基本上,我只想创建一个INSERT SELECT
,在其中我从另一个表(InternalEmplID
)中获取一列,然后对于其他列(Month
和Year
),我想添加不依赖于另一个表中的列/数据的数据。这可能吗?我对INSERT SELECT
不太熟悉,所以这对我来说是全新的。
【问题讨论】:
您不能以任何语法编写 SQL 并期望 SQL Server 能够理解并运行它。您的语法绝对无效。请阅读 MSDN 文档。 【参考方案1】:如果select
返回多行,如果您的查询将失败。更灵活的选择是使用INSERT ... SELECT
语法并在附加列中提供文字值:
INSERT INTO TableB (InternalEmplID, Month, Year)
SELECT InternalEmplIDFROM, 'July', '2020' TableA WHERE Name = 'John Smith'
【讨论】:
谢谢——你提出了一个很好的观点。我还在考虑是否有可能在我编写那个模拟 SQL 查询时遇到任何最终会出现多个选定行的情况。您是否也可以在SELECT
中加入TOP(1)
?
@LOL.NO.:使用这种语法,select
部分可以是任何有效的选择语句。所以你可以使用top
,如果那是你真正想要的。【参考方案2】:
你已经很接近了......简单地做
INSERT INTO TableB (
InternalEmplID, Month, Year
)
SELECT
InternalEmplID, 'July', '2020'
FROM
TableA
WHERE
Name = 'John Smith'
【讨论】:
以上是关于INSERT SELECT 语句只有一列用于 SELECT的主要内容,如果未能解决你的问题,请参考以下文章
SQL server select语句用于选择另一列的重复条目的ID
请教高手oracle 创建了索引后在使用SELECT,UPDATE,DELETE和INSERT语句时性能影响上有啥不同?