跨两个表执行UPDATE SET

时间:2016-10-27 15:32:35

标签: sql postgresql

我正在尝试编写一个SQL语句,它将更新表中符合特定条件的记录的字段。我主要在那里,但它正在更新表格中的每条记录,而不仅仅是符合条件的33条记录。这就是我所拥有的:

UPDATE invitations 
   SET accepted = 'true' 
FROM invitations i 
  INNER JOIN users u ON i.parent_email=u.email 
WHERE u.encrypted_password <> '' 
  AND i.accepted='false'

基本上,如果users表中的相应记录设置了密码,我试图在邀请表中将接受的字段设置为true。

2 个答案:

答案 0 :(得分:3)

PostgreSQL documentation of UPDATE说:

  

请注意,目标表不得出现在from_list中,除非您打算进行自联接(在这种情况下,它必须在from_list中显示别名)。

所以,我认为这就是你想要的:

UPDATE invitations i
SET i.accepted = 'true'
FROM users u
WHERE i.parent_email=u.email AND u.encrypted_password <> '' AND i.accepted='false'

答案 1 :(得分:0)

你可以试试这个:)

UPDATE invitations SET accepted = 'true'
WHERE (
   SELECT encrypted_password
   FROM users
   WHERE invitations.parent_email=users.email
) <> ''
AND invitations.accepted='false'