Используя postgres 8.4, я хочу обновить существующую таблицу:
CREATE TABLE public.dummy
(
address_id SERIAL,
addr1 character(40),
addr2 character(40),
city character(25),
state character(2),
zip character(5),
customer boolean,
supplier boolean,
partner boolean
)
WITH (
OIDS=FALSE
);
Первоначально я проверил мой запрос, используя оператор вставки:
insert into address customer,supplier,partner
SELECT
case when cust.addr1 is not null then TRUE else FALSE end customer,
case when suppl.addr1 is not null then TRUE else FALSE end supplier,
case when partn.addr1 is not null then TRUE else FALSE end partner
from (
SELECT *
from address) pa
left outer join cust_original cust
on (pa.addr1=cust.addr1 and pa.addr2=cust.addr2 and pa.city=cust.city
and pa.state=cust.state and substring(cust.zip,1,5) = pa.zip )
left outer join supp_original suppl
on (pa.addr1=suppl.addr1 and pa.addr2=suppl.addr2 and pa.city=suppl.city
and pa.state=suppl.state and pa.zip = substring(suppl.zip,1,5))
left outer join partner_original partn
on (pa.addr1=partn.addr1 and pa.addr2=partn.addr2 and pa.city=partn.city
and pa.state=partn.state and pa.zip = substring(partn.zip,1,5) )
where pa.address_id = address_id
Будучи новичком, я не могу преобразовать оператор update, т. е. обновить существующие строки значениями, возвращаемыми оператором select. Любая помощь высоко ценится.
sql
postgresql
subquery
sql-update
stackover
источник
источник
Ответы:
Postgres позволяет:
Этот синтаксис не является стандартным SQL, но он гораздо удобнее для этого типа запроса, чем стандартный SQL. Я считаю, что Oracle (по крайней мере) принимает нечто подобное.
источник
ERROR: 42P01: relation "dummy" does not exist
dummy
должен быть заменен именем таблицы, которую вы пытаетесь обновить. Пожалуйста, поймите вопрос и ответ, прежде чем пытаться подать заявку.Вы после
UPDATE FROM
синтаксиса.Ссылки
источник
Если при использовании объединения нет прироста производительности, я предпочитаю Common Table Expressions (CTE) для удобства чтения:
ИМХО немного современнее.
источник
Есть много способов обновить строки.
Когда дело доходит до
UPDATE
строк, использующих подзапросы, вы можете использовать любой из этих подходов.Подход-4 [Использование оператора WITH]
Надеюсь, это будет полезно.
источник
источник
@Mayur "4.2 [Использование запроса со сложным JOIN]" с общими табличными выражениями (CTE) помог мне.
Надеюсь, это поможет ...: D
источник