2016-08-19 87 views
0

我一直用了好几天这个追加查询,并将其随机引发此异常:查询太复杂?使用追加查询

查询是太复杂

查询插入到一个不同的表从数据库中检索回数据联合查询。

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停止工作,并保持返回该错误后,我增加了更多的领域,以我的联合查询。如果这有助于这是我的联合查询的一部分。此联合查询,继续工作。

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 

现在,只有联合查询工作,当我尝试INTO查询运行INSERT,插入到一个辅助表,我运行错误“查询太复杂” 随着联合查询,我们试图将问题分解到相应的答案,排名&评论,成一个记录。所以问题1 &对应的字段是一条记录。问题2 &对应的字段是不同的记录。

+0

如果你做了50次基本相同的查询,你显然会遇到模式问题。 – Bohemian

+0

我绝对知道你是对的。我们有点卡住了,因为我们正在使用第三方程序,在访问表中为所有97个问题写入一条记录,每个问题与排名,评论和答案相关。现在,我们必须将每个单独的问题及其相关字段分解成一条记录,并且除了使用这个查询外,我不太清楚要如何分解它写入的这些记录。 – Macellaria

+0

如果您无法更改表格并且表格设计被破坏,您是否可以通过触发或计划作业对数据进行一次性规范化,以将数据复制到容易使用的模式中?这个任务会相对简单,保存你的理智,并允许你创建其他报告 – Bohemian

回答

1

它看起来像你的QR表添加到您的查询,但没有加入它可能导致错误的任何事情。

在were子句中,您需要将QR表格字段与另一个表格相等,以使它们连接在一起并拉入查询。

这一切都是次要的首先是你的代码规范使用联接,而不是“FROM表1,表2,表3)”

相反,你想要做的方法: FROM表1 INNER JOIN TABLE2 ON table1.column1 = TABLE2.column1

等等

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

+0

所以你说这个错误不是在我的INSERT INTO查询中,而是在联合查询中?坦率地说,我并不是完全确定你的意思是什么(通过访问和SQL来获得一个noob),但基本上,我们从第三方程序获取写入我们访问表的记录。这些记录类似于“问题答案等级,问题2答案2等级2等等,我们超过了255个字段的限制,因此我们将问题,答案,等级,评论分解为单独的表格,现在我们需要将记录分解为一个记录问题与相应的答案,排名和评论作为一个记录,到一个辅助表 – Macellaria

+0

(s)他说你没有加入QR表到任何事情,所以每个记录在QR是返回每个记录在SSIAns,SSIRank和SSIComment - 它不是一个无限循环,但你可能会看到数以百万计的行,你需要将QR表链接到另一个表或以某种方式约束它。 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 – Aron

+0

如果添加'JOIN'无助于(在Access-SQL中使用'ON'子句而不是'WHERE'),请查看联合查询中是否存在空值。根据我的经验,这通常是我的问题:没有正确处理空值。 [MSDN](https://msdn.microsoft.com/en-us/library/bb243855(v = office.12).aspx) – MoondogsMaDawg

1

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

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

其次,使用该表作为追加查询的来源,实际上是您使用的当前“insert into”语句替换SSIQuery与表名。