2017-02-10 1 views
0

INSERT INTO에 이상한 문제가 있습니다. - UNION SELECT "L"특허 청구 범위 CLAIM_FACT AS & CLAIM_NO CLAIM_NO '구문 오류 (누락 된 연산자) 쿼리 식'CLAIM_NO LIKE "":이 오류가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 "*-*"; 

: 다음 쿼리를 실행하려고 "-"과 (와) 다릅니다.

INSERT INTO Claims_temp 행을 제거하면 쿼리가 실행되고 올바른 결과가 생성됩니다. 구문 오류는 볼 수 없습니다. CLAIM_NO를 사용하는 대신 SELECT 쿼리 부분에서 CLAIMS.CLAIM_NO를 사용하여 테이블을 지정하려고했습니다.

+0

@GurV, 나는 액세스 생각'*'대신 ANSI'%'답장을 – HoneyBadger

+0

감사 사용됩니다. 이러한 변경 사항으로도 문제가 지속됩니다. 또한 *보다는 % 연산자를 사용하면 쿼리 결과가 정확하지 않습니다. –

답변

2

이것은 이상한 접근 방법입니다. 왜는 수행 중복합니다 (UNION 제거합니다)이있을 수 있다면, SELECT DISTINCT를 사용

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

.

+0

이봐, 이거 멋지다! 이상한 접근법에 대해 유감스럽게도 아직 SQL을 처음 접했을 때 문법 중 일부가 익숙하지 않았습니다 (예 : IIF). –

1

고든의 대답은 정확하다고 생각하지만 이유를 설명하는 부록을 추가하고 싶습니다.

이 오류는 SQL 구문 분석기가 문을 이해할 수 없지만 삽입 선을 추가 할 때만 문제가있는 것처럼 보입니다.

이는 파서가 SELECT과 구별되는 것으로서 INSERT ... 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

확실히! 다시 한 번 감사드립니다! –