sql - 不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。(子查询)重复
问题描述
我对这个查询有疑问。我想做下一个:
不在同一张表中的记录,应使用另一张表添加。
DECLARE @account INT = 8825
INSERT INTO [Fleet].[dbo].[AccountsReports] ([AccountId], [ReportId], [ReportName])
SELECT
@account AccountId,
[ReportId],
[Name]
FROM
[Fleet].[dbo].[Reports]
WHERE
ReportId IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,54)
AND ReportId NOT IN (SELECT @account AccountId, [ReportId], [Name]
FROM [Fleet].[dbo].[Reports]
WHERE ReportId IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,54)
)
这显示了一个例外:
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
分离的查询工作正常。你能帮我了解我的问题是什么吗?
谢谢
解决方案
如果我理解正确,您需要使用not exists
而不是NOT IN
,因为IN
只能比较子查询中的一列值。
如果要比较多个列,可以使用exists
看起来像这样。
insert into [Fleet].[dbo].[AccountsReports]
([AccountId],
[ReportId],
[ReportName])
SELECT
@account AccountId
,[ReportId]
,[Name]
FROM [Fleet].[dbo].[Reports] t1
where ReportId in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,54) and
not exists (
SELECT
1
FROM [Fleet].[dbo].[Reports] t2
WHERE t1.ReportId = t2.ReportId and t1.Name = t2.Name
)
推荐阅读
- reactjs - 用于使某些元素的 props 依赖于另一个元素呈现的 DOM 的 React 模式
- angular - 角度问题“垫表”不是已知元素
- ruby-on-rails - 创建后脚手架时不破坏
- java - 在 jboss 部署期间验证错误。如何解决这个问题?
- r - AzureRMR 中的 list_resources() 对于某些订阅失败,并出现“无效的对象名称”错误
- linux - 可以将地址加载到缓存中但不能加载到主存中吗?
- vscode-tasks - vscode:任务扩展另一个任务/传递参数
- rabbitmq - 如何使用 Github Actions 设置 rabbitmq 服务?
- git - 从 github windows 中删除多个文件
- c++ - C++ - 执行makefile时找不到目录