我有 2 个表:Table1 和 Table2。两个表都有一个名为 Column2 的列。
我想将 Table2 中不存在的所有记录的 Table1.Column1 的所有值设置为 NULL。 IE。 Table1.Column2 <> Table2.Column2 的所有记录。
这是我尝试执行的查询:
UPDATE a
SET a.Column1 = null
FROM Table1 a
INNER JOIN Table2 b
ON a.Column2 <> b.Column2
当我尝试执行此查询时,我在“FROM”上收到“ token 未知”动态 SQL 错误。
知道我做错了什么吗?我对 SQL 相当陌生,因此我很可能使用了错误的联接类型。
最佳答案
Firebird 不支持 UPDATE
语句中的连接,相反,您需要执行如下操作:
UPDATE Table1
SET Column1 = NULL
WHERE NOT EXISTS (
SELECT 1
FROM Table2
WHERE Table2.Column2 = Table1.Column2
)
但是,这似乎表明缺少外键约束(从 Table1
到 Table2
),这将强制执行此操作(或者如果在 Table2
中使用记录,则不允许删除 Table1
中的记录)。
关于sql - 使用另一个表的记录作为 WHERE 参数更新一个表中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26655720/