2011-08-12 113 views
7

嘿傢伙,我希望你能幫助我解決這個小問題。SQL INSERT INTO與SELECT和INNER JOIN

我不太清楚如何將情況解釋給你因此不適只是給它一個嘗試。

我所試圖做的是以下幾點:

我要插入一些特殊值和參數(這是我在自己鍵入)到表RFC_Risks,所以基本上每次我發現裏面的具體原因表RCF_Risks,我想寫一個新的行,更新RfC的優先級,每次發生時,位置應增加1.

我現在的問題是,當我運行此聲明時, SELECT部分​​:-),沒有插入完成,我也沒有得到一個SQL語句錯誤或類似的東西。我只是輸入參數,然後我得到一個SELECT表。

我使用的MS Access 2010,我希望你能幫助我與我的「小」問題。

INSERT INTO RFC_Risks (RFC_No, RiskPos, Datum, Comments, RiskPrio, Reason) 
SELECT RFC_Risks.RFC_No, (RFC_Risks.RiskPos +1) AS RiskPos, [Aktuelles Datum] AS Datum, [Kommentartext] AS Comments, [Neue Prio] AS RiskPrio, RFC_Risks.Reason 
FROM RFC_Risks INNER JOIN Risk_Reasons ON RFC_Risks.Reason = Risk_Reasons.Reasontext 
WHERE RFC_Risks.Reason = Risk_Reasons.Reasontext;
+1

FYI,我不認爲你最後需要'WHERE'子句,你的'INNER JOIN'爲你做了這個=) – jadarnel27

+0

你會得到什麼樣的錯誤或意想不到的結果?這看起來對我來說OK .. – Yuck

+0

@Yuck聽起來像他們得到意想不到的結果是沒有記錄插入RFC_Risks(只有'SELECT'部分被執行) – jadarnel27

回答

1

試着將括號內的子選擇符括在括號內。

+1

我的答案可能會更好,作爲評論,而不是一個答案,但我不能評論問題,SQL對我來說看起來很簡單。據我所知,子選詞必須總是用括號括起來,所以我認爲這可能適用於你。如果這不是解決方案,肯定會回覆。 – taz

+0

所以你的意思是我應該把一個圓括號放在選擇前面? INSERT INTO RFC_Risks(RFC_No,RiskPos,基準,評論Risk_Prio,原因)(任選RFC_Risks.RFC_No,(AS RiskPos RFC_Risks.RiskPos 1),[Aktuelles基準]爲基準,[Kommentartext]作爲註釋,[抵達Neue PRIO] AS Risk_Prio,RFC_Risks.Reason FROM Risk_Reasons INNER JOIN RFC_Risks ON Risk_Reasons。Reasontext = RFC_Risks.Reason); – sXing

3

我看不出你的SQL語句任何這將阻止其執行和/或拋出一個錯誤。 (我認爲你的WHERE子句是多餘的,但不應該導致數據庫引擎拒絕它。)你用什麼方法「運行」它?

如果你正在使用Access查詢設計器,並從設計視圖到數據表視圖切換,查詢並沒有真正執行......數據表視圖會告訴你,如果查詢被執行這將是受影響的行。

這種情況與您在查詢設計器中構建刪除查詢的情況相同......數據庫視圖將顯示哪些行將被刪除如果查詢已執行,但切換到數據表視圖不會刪除那些行。

執行查詢,請點擊有紅色感嘆號的圖標。

+0

非常感謝您提供這些信息,tbh我不知道通過數據表或其他方法執行查詢存在差異,我會嘗試一下。 – sXing

0

您需要執行查詢。如果您只在數據表視圖中顯示它,則會執行SELECT語句並將其顯示爲一種預覽。

要真正執行查詢,當你在設計模式中,你可以點擊工具欄上的「運行」按鈕(紅色感嘆號)。您也可以雙擊數據庫窗口中的查詢。

+0

謝謝我嘗試過,現在在輸入參數後,我收到一個錯誤,在訪問中告訴我存在一個關鍵衝突。 我不完全確定爲什麼會發生這種情況,表RFC_Risks有2個主鍵,RFC編號和RiskPosition,因爲一個rfc可能有更多,然後只有一個風險。有任何想法嗎? – sXing

+0

@sXing,您可能試圖插入一個新的記錄,其主鍵的值與表中已存在的記錄相同(您可能還會爲其主鍵添加兩個或更多個具有相同值的記錄)。 –