2016-08-19 86 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與表名。