奇怪的是,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) )
答案 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的帮助文件中(附带截图)。
答案 2 :(得分:1)
正如您已经发现的那样,您可以使用IN进行操作。但是,存在一个限制,即IN只能用于一个字段。因此,您可以通过连接两个字段来制作符合条件的表达式。一个用于内部,一个用于外部。
update Table1 set HASXACTION = False
WHERE Code+'.'+CHARTACT IN
(
SELECT AUXILACT+'.'+CHARTACT From Table2
)