UPDATE knowns
SET EngagementTitle = instructions.EngagementTitle
...
Таблица instructions
здесь не «известна», только knowns
.Область табличных выражений только "вниз".Вы можете использовать таблицу, введенную в суперзапросе, в подзапросе, но не наоборот.
Попробуйте использовать подвыборы:
UPDATE knowns
SET engagementtitle = (SELECT instructions.engagementtitle
FROM instructions
WHERE instructions.reference = knowns.reference)
WHERE EXISTS (SELECT *
FROM instructions
WHERE instructions.reference = knowns.reference);
Я также заменил ваш WHERE
на EXISTS
,Я полагаю, именно так вы и хотели этого.Он будет обновлять только строки из knowns
, где существует запись в instructions
для.Как вы это сделали, с LEFT JOIN
в подзапросе до IN
, вы просто обновили все строки, так как LEFT JOIN
включает все строки из левой таблицы, таким образом, все идентификаторы из knowns
находятся врезультат (Возможно, вы хотели получить INNER JOIN
, это сработало бы.).
Но обратите внимание, что для работы одной строки в knowns
не должно быть более одной записи в instructions
.Я молча предположил, что это так.