Различное количество строк, затронутых при использовании select или update с одинаковыми параметрами - PostgreSQL - PullRequest
4 голосов
/ 06 сентября 2011

У меня есть два оператора SQL с одним и тем же предложением Join и Where, но у меня проблема в том, что оператор SELECT дает мне другое количество строк (в моем случае 42), поскольку оператор обновления изменится (в моем случае 80,это все строки таблицы).

Вот первая (я использую это, чтобы проверить, сколько строк будет затронуто):

SELECT COUNT(*) 
  FROM classes AS c
  INNER JOIN programs AS p
  ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8;

--> returns: 32

и вот вторая (это делаетработать, он обновит одно поле классов таблицы):

UPDATE classes SET Cl_Status = 3
  FROM classes AS c 
  INNER JOIN programs AS p
  ON c.Pr_ID = p.Pr_ID AND p.Ma_ID = 8;

--> returns: 80 (!)

Разница между первым и вторым оператором заключается только в первой строке, все остальное одинаково.

Кто-нибудь знает, что изменить, чтобы получить одинаковое количество строк в обоих операторах?

Ответы [ 2 ]

5 голосов
/ 06 сентября 2011

Запрос UPDATE отличается от запроса SELECT, он имеет самостоятельное соединение и из-за этого затронет все записи.

Из руководства :

Обратите внимание, что таблица назначения не должна отображаться в списке from_list, если вы не планируете самостоятельное объединение

3 голосов
/ 06 сентября 2011

То, что вы хотите, это

UPDATE classes
   SET CL_Status = 3
  FROM programs 
 WHERE classes.Pr_ID = programs.Pr_ID
   AND programs.Ma_ID = 8
...