Есть у меня таблица, допустим tableA. Есть другая таблица, tableB, связанная с первой как 1:M.
В таблице tableB есть два поля, Order и Flag.
Есть также третья таблица, res, в которой часть полей уже заполнена, а другую часть надо извлечь из tableA и tableB.
Причем, одной записи в res может соответствовать одна запись в A и несколько записей в B (т.к. 1:M), в этом случае из B надо взять только одну запись, с Flag=1, если таковые есть, или с минимальным Order в другом случае.
По идее, запрос должен быть таким:
- Код: Выделить всё
UPDATE res
SET ...
FROM res
JOIN tableA A ON A.InstanceID = res.InstanceID
LEFT JOIN (SELECT TOP 1 ... FROM tableB WHERE [InstanceID] = A.InstanceID ORDER BY CASE [Flag] WHEN 1 THEN 1 ELSE 2 END, [Order]) B ON B.InstanceID = A.InstanceID
В теории правильно, на практике выходит ошибка, что A не соответствует таблице или альясу, используемому в запросе. Очевидно, в MSSQL подзапросы не ведают о вышестоящей информации.
Как бы это обойти?