Postgres使用WHERE返回

时间:2018-10-23 16:35:33

标签: sql postgresql

此查询返回所有项目,而不仅仅是与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 :(得分:0)

您必须使用整个主键来联接表:

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;