Mam 2 stoły, users i profiles. I chciałbym ustawić profiles.verified na true, jeśli users.emails znajduje się na liście ('email1','email2',...).

Zainspirowany innymi wątkami SO, takimi jak aktualizowanie wierszy tabeli w postgresie za pomocą podzapytania, Próbowałem zrobić coś takiego

UPDATE 
  profiles p1  
SET 
  verified = true
FROM 
  profiles p2
  INNER JOIN users u1 on u1.id = p2.user_id
WHERE 
  u1.email in ('email1','email2',...)

Ale po prostu aktualizuje profiles.verified do true dla wszystkich rekordów w profiles.

Jak mogę zaktualizować tylko rekordy profile, jeśli są one powiązane z rekordem users z adresem e-mail na określonej liście?

1
tim_xyz 26 listopad 2018, 01:17

1 odpowiedź

Najlepsza odpowiedź

W Postgresie nie wspominasz o dwukrotnej aktualizacji tabeli:

UPDATE profiles p1  
    SET verified = true
FROM users u1 
WHERE u1.id = p1.user_id AND
      u1.email in ('email1', 'email2', ...)
1
Gordon Linoff 26 listopad 2018, 01:21