我正在尝试更新我的 Firebird-SQL 数据库中的值,我需要在 WHERE 子句中使用其他表中的值。
该声明如下所示:
UPDATE table1 SET date = 'TODAY' FROM table2
WHERE table2.id = table1.table2_id
AND table2.value1 >= table2.value2
显然,这在 Firebird-SQL 中不起作用。
这可能是一个非常简单的问题,但我不习惯 Firebird-SQL。
我正在尝试更新我的 Firebird-SQL 数据库中的值,我需要在 WHERE 子句中使用其他表中的值。
该声明如下所示:
UPDATE table1 SET date = 'TODAY' FROM table2
WHERE table2.id = table1.table2_id
AND table2.value1 >= table2.value2
显然,这在 Firebird-SQL 中不起作用。
这可能是一个非常简单的问题,但我不习惯 Firebird-SQL。
尝试使用相关子查询:
UPDATE table1
SET DATE = 'TODAY'
WHERE EXISTS (SELECT 1
FROM table2
WHERE table2.id = table1.table2_id AND table2.value1 >= table2.value2
);
@Gordon Linoff 的回答是一个非常好的方法。另一种方法是使用merge
:
MERGE INTO table1
USING table2
ON (table2.id = table1.table2_id AND table2.value1 >= table2.value2)
WHEN MATCHED THEN
UPDATE SET date = 'TODAY';
除了在最简单的情况下,我倾向于使用MERGE
而不是UPDATE