2017-02-10 75 views
0

我遇到了一個奇怪的問題與INSERT INTO。試圖運行下面的查詢:INSERT INTO缺少語法?

INSERT INTO Claims_temp (CLAIM_NO) 
SELECT CLAIM_NO AS CLAIM_FACT 
FROM CLAIMS 
WHERE CLAIM_NO LIKE "*-*" 
UNION 
SELECT "L" & CLAIM_NO AS CLAIM_FACT 
FROM CLAIMS 
WHERE CLAIM_NO NOT LIKE "*-*"; 

我得到這個錯誤: '語法錯誤(缺少操作員)在查詢表達式' CLAIM_NO LIKE 「-」 UNION SELECT 「L」 & CLAIM_NO AS CLAIM_FACT由權利要求WHERE CLAIM_NO不喜歡「-」'。

如果我刪除INSERT INTO Claims_temp行,那麼查詢將運行並生成正確的結果。我看不到任何語法錯誤。我也試過指定表格,即不使用CLAIM_NO,而是在選擇查詢部分使用CLAIMS.CLAIM_NO。

+0

@GurV,我認爲在訪問'*'用來代替ANSI'%' – HoneyBadger

+0

感謝您的答覆。這些變化仍然存在問題。此外,查詢結果對於%運算符而不是*而言不正確。 –

回答

2

這看起來很奇怪。爲什麼不只是做:

INSERT INTO Claims_temp (CLAIM_NO) 
    SELECT IIF(CLAIM_NO LIKE "*-*", CLAIM_NO, "L" & CLAIM_NO) AS CLAIM_FACT 
    FROM CLAIMS; 

如果有可能是重複(其中UNION刪除),然後使用SELECT DISTINCT

+0

嘿,這太棒了!對於奇怪的方法感到抱歉,我還是相當陌生的SQL,所以一些語法對我來說並不熟悉(例如IIF)。 –

1

我認爲戈登的答案是正確的,但我想補充說明原因。

錯誤提示SQL解析器無法理解語句,但問題似乎只在插入行被添加時出現。

這表明解析器將INSERT ... SELECT視爲不同於SELECT的語法,因此UNION可能在正常管道中不受支持。

如果這不適合你,我會嘗試一個內聯視圖。像這樣:

INSERT INTO Claims_temp (CLAIM_NO) 
SELECT claim_fact FROM (
SELECT CLAIM_NO AS CLAIM_FACT 
FROM CLAIMS 
WHERE CLAIM_NO LIKE "*-*" 
UNION 
SELECT "L" & CLAIM_NO AS CLAIM_FACT 
FROM CLAIMS 
WHERE CLAIM_NO NOT LIKE "*-*") AS foo; 
+0

謝謝。我儘量避免子查詢,因爲他們往往會爲我打破Access。 –

+0

他們也使代碼難以閱讀。再一次,戈登的答案是最好的。但希望這可以揭示爲什麼它會發生:-) –

+0

肯定!再次感謝! –