sql - 是否可以使用来自多个表的数据执行 INSERT INTO SELECT 语句?
问题描述
问题如上。我目前使用的SQL代码如下:
"INSERT INTO [tblClasses/Students] (StudentID, ClassID) " & _
"SELECT StudentID FROM tblStudent WHERE Username = @StudentUser " & _
"SELECT ClassID FROM tblClasses WHERE ClassName = @ClassName ;"
当我尝试运行此查询时,我收到以下错误消息:
'查询值和目标字段的数量不同'
显然,我使用的方法不起作用,那么有人知道编写查询的正确方法吗?
解决方案
您需要一个 SELECT .. FROM .. 语句作为源。通常您会使用 JOIN,但如果表不相关,请使用笛卡尔积。
INSERT INTO [tblClasses/Students] (StudentID, ClassID)
SELECT tblStudent.StudentID, tblClasses.ClassID
FROM tblStudent, tblClasses
WHERE tblStudent.Username = @StudentUser
AND tblClasses.ClassName = @ClassName
不确定这是否会创建重复记录。如有必要,使用SELECT DISTINCT
.
要在 Access 中测试查询,请使用[StudentUser]
和[ClassName]
作为参数,并在要求时提供值。
[ClassName]
出于某种原因,除非明确指定为参数,否则Access 会跳闸。用这个:
PARAMETERS StudentUser Text ( 255 ), ClassName Text ( 255 );
INSERT INTO [tblClasses/Students] ( StudentID, ClassID )
SELECT tblStudent.StudentID, tblClasses.ClassID
FROM tblStudent, tblClasses
WHERE tblStudent.Username = [StudentUser]
AND tblClasses.ClassName = [ClassName];
推荐阅读
- docker - Docker 尝试 mkdir 我挂载的文件夹
- java - 将java缓冲区设置为从写入位置读取 - 偏移量
- go - 如何将切片与字符串进行比较?
- python - Web Scraping循环结构问题
- java - 将 libgdx 项目导出为 HTML - 您是否忘记继承所需的模块?
- sql-server - 如何在两个 docker 容器(mssql 和 .net 核心应用程序)之间进行通信,连接被拒绝 127.0.0.1:1433
- postgresql - Postgresql - 随着时间的推移聚合指标没有时间戳?
- reactjs - 在 React 组件 Props 中使用通用流类型并实例化通用组件>
- spring-integration - Spring File Inbound Channel Adapter 变慢
- angular - ng 弹出命令用于 Webpack.config.js 后,具有 .html 的 url 不呈现