probleme beim update / unterabfrage

hi,

ich möchte das ergebniss einer unterabfrage als updatewert nutzen.

Problem: die unterabfrage erzeugt eine ganze liste von werten
(was auch logisch ist)

update einzellagen_abgleich.load_lage_alle_1
set “LAG_NR” =
(select el_alle.“WLG_NR” FROM einzellagen_abgleich.load_lage_alle_1, einzellagen.el_alle
WHERE contains (buffer(einzellagen.el_alle.the_geom,1), einzellagen_abgleich.load_lage_alle_1.the_geom) = TRUE);

Wie kann ich immer nur einen Wert einfügen ??
(Ohne eine extra Tabelle vorher mit der containsabfrage zu erzeugen…)

Irgendwie fehlt mir hier gerade die logik…

geht das nur über ein function wie z.b. loop ??

Danke euch

LOOP gibt es nicht in SQL. Wenn Du 2 Tabellen hast und in einer den Inhalt einer Spalte einer anderen haben willst (via UPDATE), dann muß Du eine Verbindung zwischen den Tabellen herstellen, damit klar ist, welche Zeile gemeint ist. Beispiel:

test=# select * from ziel;
 id | wert
----+------
  1 |
  2 |
  3 |
  4 |
  5 |
(5 Zeilen)

Zeit: 0,193 ms
test=*# select * from quelle;
 id | wert
----+------
  1 |    1
  2 |    2
  3 |    3
  4 |    4
  5 |    5
(5 Zeilen)

Zeit: 0,322 ms
test=*# update ziel set wert = (select wert from quelle);
FEHLER:  als Ausdruck verwendete Unteranfrage ergab mehr als eine Zeile
test=!# rollback;
ROLLBACK
Zeit: 0,178 ms
test=# update ziel set wert = quelle.wert from quelle where ziel.id=quelle.id;
UPDATE 5
Zeit: 0,372 ms
test=*# select * from ziel;
 id | wert
----+------
  1 |    1
  2 |    2
  3 |    3
  4 |    4
  5 |    5
(5 Zeilen)

Zeit: 0,319 ms

Andreas

super,

umgebaut zu:


update einzellagen_abgleich.load_lage_alle_1
set “LAG_NR” = el_alle.“WLG_NR” FROM einzellagen.el_alle
WHERE contains (buffer(einzellagen.el_alle.the_geom,1), einzellagen_abgleich.load_lage_alle_1.the_geom) = TRUE;

funktioniert…

ICH DANKE DIR !!!

gruß v.