… Spaltenwerten einer anderen Tabelle so wie es bei Excel die Funktion SVERWEIS macht?
Gegeben sind zwei Tabellen:
Die Tabelle „leute“ enthält Personendaten und eine Spalte, die nach der SQL-Operation einen Beitragssatz gefülklt bekommen soll, und zwar in Abhängigkeit von Alter und Geschlecht.
Die Tabelle Tarif enthält drei Spalten: Alter (wg. reserviertem SQL-Begriff „LebAlter“ genannt), Beitragssatz für Mann und Beitragssatz für Frau.
Der gesuchte SQL-Befehl soll die Spalte Beitragssatz in der Tabelle „leute“ mit den passenden Werten aus der Tabelle „tarif“ füllen.
Zur Vereinfachung reicht es, wenn das Geschlecht vernachlässigt wird und immer der alterspassende BeitragsSatzM verwendet wird.
So werden die Beispieltabellen in sqlite3 aufgebaut:
DROP table leute;
CREATE TABLE leute
(
Vorname text,
Geburtsjahr integer,
Geschlecht text,
Beitragssatz integer );
DROP table tarif;
CREATE TABLE tarif
(
LebAlter integer ,
BtgSatzM integer ,
BtgSatzF integer
);
INSERT INTO leute
(Vorname, Geburtsjahr, Geschlecht)
VALUES („Anke“, 1944, „F“);
INSERT INTO leute
(Vorname, Geburtsjahr, Geschlecht)
VALUES („Markus“, 1973, „M“);
INSERT INTO tarif
(LebAlter, BtgSatzM, BtgSatzF)
VALUES
(1, 345, 444);
INSERT INTO tarif
(LebAlter, BtgSatzM, BtgSatzF)
VALUES
(39, 845, 944);
INSERT INTO tarif
(LebAlter, BtgSatzM, BtgSatzF)
VALUES
(68, 1235, 1484);
INSERT INTO tarif
(LebAlter, BtgSatzM, BtgSatzF)
VALUES
(101, 2845, 2544);
Das sieht dann so aus:
sqlite> select * from leute;
Vorname Geburtsjahr Geschlecht Beitragssatz
Anke 1944 F
Markus 1973 M
sqlite> select * from tarif;
LebAlter BtgSatzM BtgSatzF
1 345 444
39 845 944
68 1235 1484
101 2845 2544
sqlite>
Ich stelle auf das Alter im Jahr 2012 ab und habe folgenden Befehl gebastelt:
UPDATE leute SET beitragssatz = (SELECT BtgSatzM FROM tarif WHERE (LebAlter = (SELECT (2012 - Geburtsjahr) FROM leute)));
Das Ergbnis ist falsch:
sqlite> select * from leute;
Vorname Geburtsjahr Geschlecht Beitragssatz
Anke 1944 F 1235
Markus 1973 M 1235
sqlite>
Der Befehl füllt immer den gleichen Beitragssatz. Dass er bei Anke richtig ist, scheint reiner Zufall. Ich habe das ganze zunächst mit großen Tabellen probiert (über 10tausend Zeilen und alle Alter vertreten), und da bekommen auch alle den gleichen Wert.
Das gewünschte Ergebnis wäre:
Vorname Geburtsjahr Geschlecht Beitragssatz
Anke 1944 F 1235
Markus 1973 M 944
Ich bin noch in den ersten Gehversuchen mit SQL. Ich habe mir etwas zu JOIN angelesen, ob die Lösung da zu suchen ist. Aber da scheinen immer komplette Zeilen im Rahmen einer Verknüpfung rübergezogen zu werden.
Ich weiß nicht, ob mit SQL überhaupt möglich, was ich sonst in Excel mit SVERWEIS mache. Der Nachteil von SVERWEIS/Excel ist, dass man die Formel immer 10tausende male herunterkopieren muss und der Rechner dabei ordentlich ins Schwitzen kommt.
Weiß jemand, ob und wie es in SQLITE3 geht?