2014-11-26 2 views
2

enter image description here Странно, кажется, что предложение EXISTS не поддерживается движком sql DBISAM, так как это всегда приводит к ошибке SQL. Ниже приведен пример, в котором используются EXISTS. Мне что-то здесь не хватает?Является ли условие EXISTS поддерживаемым DBISAM-модулем sql?

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 не поддерживает EXISTS оператора для определения суб-выберите предикаты 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 
       ); 

Это также должно решить эту проблему вы имеете, который является ссылкой на Table1 как в предложении update и подзапроса. (Это ограничение MySQL.)

РЕДАКТИРОВАТЬ:

Я не могу найти никаких ссылок на EXISTS (или даже подзапросов) для DBISAM. Но, вы можете сделать обновления с соединениями, так что это должно быть эквивалентно:

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, я не думал, что существует какая-либо связь с MySQL. – MartynA

1

Как вы уже нашли, вы можете сделать это с IN. Однако существует ограничение, что IN может работать только с одним полем. Таким образом, вы можете обойти это, объединив два поля, чтобы сделать выражения, соответствующие критериям. Один для внутреннего и один для внешнего.

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

Справа. Я попробую обходное решение с оператором IN. – Johny