Обновить оператор, используя значения из нескольких таблиц
Я пытаюсь обновить значения в моей базе данных 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.
2 ответа
Попробуйте использовать коррелированный подзапрос:
UPDATE table1
SET DATE = 'TODAY'
WHERE EXISTS (SELECT 1
FROM table2
WHERE table2.id = table1.table2_id AND table2.value1 >= table2.value2
);
Ответ @ Гордона Линоффа - очень хороший подход. Альтернативой является использование 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