我一直在使用这个追加查询几天,它随机抛出这个异常:
查询过于复杂
查询将从联合查询中检索回的数据插入到另一个表中。
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&相应的字段是不同的记录。
答案 0 :(得分:1)
看起来您已将表QR添加到您的查询中,但未将其加入任何可能导致错误的内容。
在are子句中,您需要使QR表字段等于另一个表,以使其连接在一起并进入查询。
这是次要的,首先是将代码标准化为使用连接而不是“FROM table1,table2,table3”的方法“
相反,你想做: 从表1 INNER JOIN TABLE2 ON table1.column1 = TABLE2.column1
等...
如果你提供了完整的架构以及表的外键和主键,我可以给你一个确切的答案。
答案 1 :(得分:1)
一种方法可以将操作分成两个步骤。
首先,将union查询的输出写入(temp)表。如果你使用“创建表”,这很简单。
其次,使用该表作为追加查询的源,实际上是当前的“插入到”语句,其中使用表名替换 SSIQuery 。