2

在此处输入图像描述奇怪的是,似乎该EXISTS子句不受DBISAMsql 引擎支持,因为它总是导致 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) )
4

3 回答 3

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;
于 2014-11-26T12:41:45.773 回答
2

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

DBISAM 帮助文档

于 2014-11-26T13:48:59.130 回答
1

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

update Table1 set HASXACTION = False
WHERE Code+'.'+CHARTACT IN 
 (  
   SELECT  AUXILACT+'.'+CHARTACT From Table2
 )
于 2014-11-26T13:59:53.857 回答