Thread: Help with UPDATE syntax
Howdy, I am porting a bit of code from ORACLE to PostgreSQL 7.1 and am getting stuck on an update statment. I am NOT a SQL expert, merely a beginner swimming hard, so any help will be greatly appreciated. The specific query looks like this: begin transaction update user_group_map map set user_id = 4 where user_id = 9 not exists ( select * from user_group_map where user_id = 4 and group_id = map.group_idand role = map.role ) commit There are other updates taking place during the transaction, but this is the one for which I can't figure out the PostgreSQL equivalent. I've tried this: update user_group_map set user_id = 4 from user_group_map map where user_id =9 and not exists ( select * from user_group_map ug2 where user_id = 4 and ug2.group_id = map.group_id and ug2.role = map.role); for the update replacement, but get an error: NOTICE: current transaction is aborted, queries ignored until end oftransaction block As noted earlier, any guidance will be most appreciated. Thanks, Jeff.
Jeff Putsch <putsch@mxim.com> writes: > update > user_group_map map Postgres doesn't allow UPDATE to use an alias for the target table (SQL92 doesn't either). Get rid of the alias name "map", and write the full table name "user_group_map" in the places where "map" is used in the WHERE clause. regards, tom lane
Try eliminating the statement " from user_group_map map". It does not belong in the update. Here is the fully rewrittenstatement: update user_group_map set user_id = 4 where user_id = 9 and not exists ( select * from user_group_map ug2 where user_id = 4 and ug2.group_id = map.group_id and ug2.role = map.role); -----Original Message----- From: Jeff Putsch [SMTP:putsch@mxim.com] Sent: Wednesday, March 14, 2001 11:47 PM To: pgsql-sql@postgresql.org Subject: Help with UPDATE syntax Howdy, I am porting a bit of code from ORACLE to PostgreSQL 7.1 and am getting stuck on an update statment. I am NOT a SQL expert, merely a beginner swimming hard, so any help will be greatly appreciated. The specific query looks like this: begin transaction update user_group_map map set user_id = 4 where user_id = 9 not exists ( select * from user_group_map where user_id = 4 and group_id = map.group_idand role = map.role ) commit There are other updates taking place during the transaction, but this is the one for which I can't figure out the PostgreSQL equivalent. I've tried this: update user_group_map set user_id = 4 from user_group_map map where user_id =9 and not exists ( select * from user_group_map ug2 where user_id = 4 and ug2.group_id = map.group_id and ug2.role = map.role); for the update replacement, but get an error: NOTICE: current transaction is aborted, queries ignored until end oftransaction block As noted earlier, any guidance will be most appreciated. Thanks, Jeff. ---------------------------(end of broadcast)--------------------------- TIP 4: Don't 'kill -9' the postmaster
From: "Michael Davis" <mdavis@sevainc.com> > Try eliminating the statement " from user_group_map map". It does not belong in the update. Here is the fully rewritten statement: > > update > user_group_map > set > user_id = 4 > where > user_id = 9 and > not exists ( > select * from > user_group_map ug2 > where > user_id = 4 and > ug2.group_id = map.group_id and ^^^ > ug2.role = map.role); ^^^ I take it these are actually "user_group_map"? - Richard Huxton