DBISAM的sql引擎是否支持EXISTS子句?

时间:2014-11-26 12:37:04

标签: sql dbisam

enter image description here奇怪的是,EXISTS sql引擎似乎不支持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) )

3 个答案:

答案 0 :(得分: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的限制。)

编辑:

我找不到对dbisam的EXISTS(甚至子查询)的任何引用。但是,您可以使用连接进行更新,因此这应该是等效的:

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

答案 1 :(得分:1)

别介意人,我刚刚了解到DBISAM不支持EXISTS运算符来指定WHERE子句中的子选择谓词。它记录在DBISAM的帮助文件中(附带截图)。

DBISAM Help Documentation

答案 2 :(得分:1)

正如您已经发现的那样,您可以使用IN进行操作。但是,存在一个限制,即IN只能用于一个字段。因此,您可以通过连接两个字段来制作符合条件的表达式。一个用于内部,一个用于外部。

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