2014-11-26 2 views
2

enter image description here 이상하게도 DBISAM의 SQL 엔진은 EXISTS 절을 지원하지 않습니다. 항상 SQL 오류가 발생하기 때문입니다. 다음은 EXISTS가 사용되는 샘플입니다. 내가 여기서 뭐라도 놓치고 있니?DBISAM의 SQL 엔진이 EXISTS 절을 지원합니까?

update Table1 set HASXACTION = False 
WHERE EXISTS (SELECT SERIALID 
       From Table2 
       LEFT JOIN Table1 ON (Table2 .AUXILACT = Table1 .CODE) 
           AND (Table2 .CHARTACT = Table1 .CHARTACT)) 
+1

무엇이 오류입니까? 예를 들어, MySQL에서는이 구문을 사용할 수 없습니다. –

+0

DBISAM은 EXISTS 문을 지원하므로 쿼리에 문제가 있습니다. – whosrdaddy

+0

DBISAM 자체의 데이터베이스 유틸리티 도구를 사용하여 오류 스크린 샷을 게시했습니다. – Johny

답변

1

명를 신경 쓰지 마, 난 단지 DBISAM 지원 조항 WHERE에서 하위 선택 조건을 지정하는 연산자 존재하지 않는 것을 배웠다. DBISAM의 도움말 파일 (스크린 샷 첨부)에 설명되어 있습니다. 당신이 이미 발견했듯이

DBISAM Help Documentation

2

하위 쿼리에 실제로 join이 필요하지 않다고 가정합니다.

UPDATE Table1 
    SET HASXACTION = False 
    WHERE EXISTS (SELECT SERIALID 
        FROM Table2 
        WHERE Table2.AUXILACT = Table1.CODE AND Table2.CHARTACT = Table1.CHARTACT 
       ); 

이 또한 update 절과 하위 쿼리 Table1 모두에 대한 참조입니다 발생한 문제를 해결해야한다 : 당신은 아마 상관 하위 쿼리 계획입니다. (이것은 MySQL의 제한 사항입니다.)

편집 : 나는 DBISAM에 대한 EXISTS (또는 하위 쿼리)에 대한 참조를 찾을 수 없습니다

. 그러나, 조인하면 업데이트를 할 수있는, 그래서 이것은 동일해야 :

UPDATE Table1 
    SET HASXACTION = False 
    FROM Table1 JOIN 
     Table2 
     ON Table2.AUXILACT = Table1.CODE AND Table2.CHARTACT = Table1.CHARTACT; 
+0

ElevateDB는 상관 된 하위 쿼리를 지원하지만 DBISAM은 상관 관계가 없습니다. –

+0

음, MySQL? DBIsam은 Elevate Software의 독점적 인 DB 엔진입니다. MySQL과 관련이 없다고 생각합니다. – MartynA

1

, 당신은 IN와 함께 할 수 있습니다. 그러나 IN은 한 필드에서만 작동 할 수 있다는 제한이 있습니다. 따라서 두 필드를 연결하여 조건에 맞는 표현식을 만들어 주위를 둘러 볼 수 있습니다. 하나는 내부 용이고 다른 하나는 외부 용입니다.

update Table1 set HASXACTION = False 
WHERE Code+'.'+CHARTACT IN 
( 
    SELECT AUXILACT+'.'+CHARTACT From Table2 
) 
+0

오른쪽. IN 연산자로 해결 방법을 시도해 보겠습니다. – Johny