2016-10-27 24 views
1

我想寫一個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' 

基本上我嘗試設置接受字段的邀請表true,如果在用戶表中的相應記錄有密碼設定。

回答

0

你可以試試這個:)

UPDATE invitations SET accepted = 'true' 
WHERE (
    SELECT encrypted_password 
    FROM users 
    WHERE invitations.parent_email=users.email 
) <> '' 
AND invitations.accepted='false' 
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'