查询太复杂了?使用追加查询

时间:2016-08-19 16:48:33

标签: sql database ms-access append ms-access-2010

我一直在使用这个追加查询几天,它随机抛出这个异常:

  

查询过于复杂

查询将从联合查询中检索回的数据插入到另一个表中。

INSERT INTO [CA-SSI Dispatch]
SELECT 
SSIQuery.[Phonenumber] AS Phonenumber, 
SSIQuery.[FormRecordNumber] AS FormRecordNumber, 
SSIQuery.[InspectedBY] AS InspectedBY, 
SSIQuery.[Project] AS Project, 
SSIQuery.[DateTimeInspection] AS DateTimeInspection, 
SSIQuery.[Question] AS Question, 
SSIQuery.[Answer] AS Answer, 
SSIQuery.[Rank] AS Rank, 
SSIQuery.[Comment] AS Comment, 
SSIQuery.[Regulation] AS Regulation
FROM SSIQuery

WHERE NOT EXISTS    
(SELECT *    FROM [CA-SSI Dispatch]    WHERE   SSIQuery.[Phonenumber] = [CA-SSI Dispatch].[Phonenumber]    
AND   SSIQuery.[FormRecordNumber] =[CA-SSI Dispatch].[FormRecordNumber]    
AND   SSIQuery.[Project] = [CA-SSI Dispatch].[Project]   
AND   SSIQuery.[DateTimeInspection] = [CA-SSI Dispatch].[DateTimeInspection] 
AND SSIQuery.[Question] = [CA-SSI Dispatch].[Question] 
AND SSIQuery.[Answer] = [CA-SSI Dispatch].[Answer]
AND SSIQuery.[FormRecordNumber] = [CA-SSI Dispatch].[FormRecordNumber]);

INSERT INTO停止工作并在我向union查询添加更多字段后继续返回该错误。如果它有帮助这是我的联合查询的一部分。这个UNION QUERY继续工作。

SELECT
SSIAns.phonenumber AS Phonenumber,
SSIAns.Form_Record_Number As FormRecordNumber,
SSIAns.Inspected_By AS InspectedBY,
SSIAns.Project,
SSIAns.Date_Time_of_Inspection AS DateTimeInspection,
QR.q1 AS Question,
SSIAns.Clean_level_ground AS Answer,
SSIRank.Rank_1 AS Rank,
SSIComment.Comment_1 AS Comment,
QR.r1 AS Regulation

FROM SSIAns, SSIRank,SSIComment, QR

WHERE 
SSIRank.Rank_1 = "2_Address_Within_3_Days" AND 
SSIAns.Form_Record_Number=SSIRank.Form_Record_Number 
AND SSIRank.Form_Record_Number =SSIComment.Form_Record_Number

UNION 
SELECT
SSIAns.phonenumber AS Phonenumber,
SSIAns.Form_Record_Number As FormRecordNumber,
SSIAns.Inspected_By AS InspectedBY,
SSIAns.Project,
SSIAns.Date_Time_of_Inspection AS DateTimeInspection,
QR.q2 AS Question,
SSIAns.Adequate_ramps_barricading AS Answer,
SSIRank.Rank_2 AS Rank,
SSIComment.Comment_2 AS Comment,
QR.r1 AS Regulation

FROM SSIAns, SSIRank,SSIComment, QR

WHERE 
SSIRank.Rank_2 = "2_Address_Within_3_Days" AND 
SSIAns.Form_Record_Number=SSIRank.Form_Record_Number 
AND SSIRank.Form_Record_Number =SSIComment.Form_Record_Number

联合查询会与下一个相应的字段一起反复进行。例如:rank_3,rank_4等

两个查询都正常工作,直到我加起来直到第50个

UNION 
SELECT
SSIAns.phonenumber AS Phonenumber,
SSIAns.Form_Record_Number As FormRecordNumber,
SSIAns.Inspected_By AS InspectedBY,
SSIAns.Project,
SSIAns.Date_Time_of_Inspection AS DateTimeInspection,
QR.q2 AS Question,
SSIAns.Adequate_ramps_barricading AS Answer,
SSIRank.Rank_50 AS Rank,
SSIComment.Comment_50 AS Comment,
QR.r1 AS Regulation

FROM SSIAns, SSIRank,SSIComment, QR

WHERE 
SSIRank.Rank_50 = "2_Address_Within_3_Days" AND 
SSIAns.Form_Record_Number=SSIRank.Form_Record_Number 
AND SSIRank.Form_Record_Number =SSIComment.Form_Record_Number

现在,只有union查询工作,当我尝试运行INSERT INTO查询时,要插入到辅助表中,我运行错误"查询太复杂" 通过联合查询,我们会尝试将问题分解为相应的答案,排名&评论,成为一个记录。问题1&相应的字段是一条记录。问题2&相应的字段是不同的记录。

2 个答案:

答案 0 :(得分:1)

看起来您已将表QR添加到您的查询中,但未将其加入任何可能导致错误的内容。

在are子句中,您需要使QR表字段等于另一个表,以使其连接在一起并进入查询。

这是次要的,首先是将代码标准化为使用连接而不是“FROM table1,table2,table3”的方法“

相反,你想做:     从表1     INNER JOIN TABLE2     ON table1.column1 = TABLE2.column1

等...

如果你提供了完整的架构以及表的外键和主键,我可以给你一个确切的答案。

答案 1 :(得分:1)

一种方法可以将操作分成两个步骤。

首先,将union查询的输出写入(temp)表。如果你使用“创建表”,这很简单。

其次,使用该表作为追加查询的源,实际上是当前的“插入到”语句,其中使用表名替换 SSIQuery

相关问题