PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL:jak zaktualizować wiersze w CTE

with cte as(
select ....... from aTable
),update_cte as(
update cte set aField=(select somthing from cte1)
)

Nie możesz tego zrobić.

UPDATE nie może odnosić się do terminu CTE w PostgreSQL, ponieważ CTE są materializowane. Nie są to tylko widoki podstawowych danych. (To czasami naprawdę denerwujące, ale tak właśnie jest).

Możesz:

CREATE TEMPORARY VIEW someview AS SELECT ... FROM atable;

UPDATE someview SET afield = ...

Jeśli chcesz; które będą działać na nowszych wersjach PostgreSQL, które obsługują automatycznie aktualizowane widoki. Myślę, że 9.2 ma.

W przeciwnym razie myślę, że chcesz coś takiego:

WITH cte1 as (
  select ..... from bTable inner join cte using(anID)
)
update aTable 
set aField=(select somthing from cte1)
WHERE ... where clause from cte ...
RETURNING *;

ale naprawdę proszę nie wywołaj warunki CTE cte , cte1 itp. Nadaj im przydatne, opisowe nazwy, które powiedzą Ci, czym one są. To jak programy pełne zmiennych o nazwie a przez x ... następna osoba, która będzie musiała zarządzać Twoim kodem, lub każda osoba, której poprosisz o pomoc, nie lubię to.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak określić hasło do „psql” nieinteraktywnie?

  2. zagnieżdżony wybór przy użyciu licznika do zliczania każdego wiersza w Postgres

  3. Tablica typu złożonego jako dane wejściowe procedury składowanej przekazane przez C# Npgsql

  4. Utwórz regułę lub wyzwalacz Postgres, aby automatycznie konwertować kolumnę na małe lub wielkie litery podczas wstawiania

  5. Jak uzyskać wartości średnie dla interwałów czasowych w Postgresie