Hilfe!

Hallo alle zusammen :slight_smile: Ich möchte in einer dafür erstellten Spalte das Ergebnis einer Subtraktion aus 2 anderen Spalten (2 versch. Tabellen) bekommen. Zusätzlich soll das Ergebnis automatisch aktualisiert werden, wenn ich in einer der beiden Tabellen Werte ändere bzw. weitere Daten hinzufüge…

Hier der SQL-Befehl, den ich verwendete, um die Tabellen zu erstellen, falls euch das weiterhilft… Wäre euch für eine eine problemlösende Hilfestellung sehr dankbar.

CREATE TABLE tabelle1
(
spalte_a numeric,
spalte_b numeric,
spalte_c numeric,
“Diff_zuT2” numeric
)
WITH (OIDS=FALSE);
ALTER TABLE tabelle1 OWNER TO postgres;

CREATE TABLE tabelle2
(
spalte_d numeric,
spalte_e numeric,
spalte_f numeric
)
WITH (OIDS=FALSE);
ALTER TABLE tabelle2 OWNER TO postgres;

:confused:

PostgreSQL, oder allgemein: SQL-Datenbanken, sind keine Tabellenkalkulationen.

Deine Tabellen enthalten je einige Spalten, tabelle1 diese ‘Diff’-Spalte. Wie soll sich das berechnen, wenn Tabelle1 z.B. 10 Einträge und Tabelle2 20 Einträge hat?

Also, Du brauchst eine Verknüpfung, welche Zeilen wie zusammenhängen.

Lösen kannst Du sowas z.B. via einem JOIN, und das Berechnen via einem VIEW:

test=# create table m1 (id serial primary key, val int);
NOTICE:  CREATE TABLE will create implicit sequence "m1_id_seq" for serial column "m1.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "m1_pkey" for table "m1"
CREATE TABLE
Zeit: 82,892 ms
test=*# create table m2 (id serial primary key, val int);
NOTICE:  CREATE TABLE will create implicit sequence "m2_id_seq" for serial column "m2.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "m2_pkey" for table "m2"
CREATE TABLE
Zeit: 3,907 ms
test=*# create view view_m as select m1.val -m2.val from m1 left join m2 on (m1.id=m2.id);
CREATE VIEW
Zeit: 33,850 ms
test=*# insert into m1 (val) values (10);
INSERT 0 1
Zeit: 0,597 ms
test=*# insert into m2 (val) values (8);
INSERT 0 1
Zeit: 0,557 ms
test=*# select * from view_m ;
 ?column?
----------
        2
(1 Zeile)

Zeit: 0,548 ms
test=*#

Alles klar?


Andreas

Bonus: aussagekräftige Überschriften helfen dem geneigten Leser :wink:

Ok. Hast mir geholfen…

Danke :smiley: