Обновить оператор, используя значения из нескольких таблиц

Я пытаюсь обновить значения в моей базе данных 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

Другие вопросы по тегам