sql - 使用另一个表的记录作为 WHERE 参数更新一个表中的记录

标签 sql sql-update inner-join firebird firebird2.5

我有 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
)

但是,这似乎表明缺少外键约束(从 Table1Table2 ),这将强制执行此操作(或者如果在 Table2 中使用记录,则不允许删除 Table1 中的记录)。

关于sql - 使用另一个表的记录作为 WHERE 参数更新一个表中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26655720/

相关文章:

c# - C#中如何判断SQL作业是否执行成功

sql - 字符串拆分为列而不是行

基于日期的 SQL Case 语句

mysql - SQL - 无法弄清楚如何连接三个表

php - 如何改进和加速这个使用嵌套循环的 PHP 脚本?

mysql - 如何在 Symfony 和 Doctrine 中连接两个实体?

mysql查询从一张表中合并表

SQL Server - 使用 VIEW 更新多个基表

sql - 从12月到12月获得AVG SQL

php - 如何使用 php 更新 sql 中的图像