Postgres ВОЗВРАЩАЯСЬ ГДЕ - PullRequest
       1

Postgres ВОЗВРАЩАЯСЬ ГДЕ

0 голосов
/ 23 октября 2018

Этот запрос возвращает все элементы, а не только те, которые соответствуют 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).

1 Ответ

0 голосов
/ 23 октября 2018

Вы должны использовать первичный ключ whole для объединения таблиц:

UPDATE mytable SET status = 'A'
FROM
(
  SELECT id, filtered FROM mytable
  WHERE filtered = 'B' and (status = 'C' or status = 'D')
  ORDER BY status NULLS LAST
  LIMIT 100
  FOR UPDATE
) sub
WHERE (mytable.id, mytable.filtered) = (sub.id, sub.filtered)
RETURNING mytable.id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...