Этот запрос возвращает все элементы, а не только те, которые соответствуют filtered = 'B'
.Я должен поместить filtered = 'B'
во внешний WHERE
, чтобы он работал.Почему это работает таким образом?
UPDATE mytable SET status = 'A'
FROM
(
SELECT id FROM mytable
WHERE filtered = 'B' and (status = 'C' or status = 'D')
ORDER BY status NULLS LAST
LIMIT 100
FOR UPDATE
) sub
WHERE mytable.id = sub.id
RETURNING mytable.id
Как я могу заставить его соответствующим образом фильтровать внутренний запрос?Я мог бы поместить фильтр во внешний запрос, но тогда неясно, что происходит во внутреннем и внешнем запросе, и его труднее понять.
Первичный ключ mytable
- (id, filtered)
.