首页 > 解决方案 > 是否可以使用来自多个表的数据执行 INSERT INTO SELECT 语句?

问题描述

问题如上。我目前使用的SQL代码如下:

"INSERT INTO [tblClasses/Students] (StudentID, ClassID) " & _
"SELECT StudentID FROM tblStudent WHERE Username = @StudentUser " & _
"SELECT ClassID FROM tblClasses WHERE ClassName = @ClassName ;"

当我尝试运行此查询时,我收到以下错误消息:

'查询值和目标字段的数量不同'

显然,我使用的方法不起作用,那么有人知道编写查询的正确方法吗?

标签: sqlvb.netms-access

解决方案


您需要一个 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.

如何在 VB.Net 中使用 SQL 参数


要在 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];

推荐阅读