Thread SQLite - IDs aus zwei Tabellen anhand von anderen Spaltenwerte in dritte Tabelle eintragen (9 answers)
Opened by Linuxer at 2017-05-18 19:30

Gast payx
 2017-05-21 11:09
#186589 #186589
Hallo Linuxer,

ich hoffe, ich habe die Aufgabe richtig verstanden.

Zunächst würde ich (off topic) sicherstellen, dass die Mapping-Tabelle keine Dubletten enthalten kann:

Code: (dl )
1
2
3
4
5
CREATE TABLE IF NOT EXISTS Addr_Groups_Members (
grp_id INTEGER REFERENCES Address_Groups(id),
obj_id INTEGER REFERENCES Addresses(id),
constraint unique_mapping unique (grp_id, obj_id)
);

Einfachere Inserts könnten so aussehen:
Code: (dl )
1
2
INSERT INTO Addr_Groups_Members SELECT g.id as grp_id, a.id as obj_id from Address_Groups as g, Addresses as a where g.name = "dummy" and a.name = "any";
INSERT INTO Addr_Groups_Members SELECT g.id as grp_id, a.id as obj_id from Address_Groups as g, Addresses as a where g.name = "dummy" and a.name = "localhost";

Die Erzeugung Deiner SQLs wird dadurch aber nicht einfacher, denn Du musst ja bei diesem wie bei Deinem SQL die beiden Parameter einfügen.

Dasselbe Ergebnis wie mit obigen beiden Inserts bekommst Du bei Deinem Beispiel freilich so (ohne Parameter, kartesisches Produkt):
Code: (dl )
INSERT INTO Addr_Groups_Members SELECT g.id as grp_id, a.id as obj_id from Address_Groups as g, Addresses as a;

Aber vermutlich möchtest Du künftig nicht immer alle Adressen in allen Gruppen haben.

Nachdem wir ganz oben die Mappings unique gemacht haben, sollten wir jetzt noch (wieder off topic) sicherstellen, dass gar nicht erst versucht wird, Dubletten einzufügen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO
Addr_Groups_Members
SELECT
g.id as grp_id
, a.id as obj_id
from
Address_Groups as g
join Addresses as a on
g.name = "dummy"
and
a.name = "any"
left outer join Addr_Groups_Members as ag on
g.id = ag.grp_id
and
a.ID = ag.obj_id
where
ag.obj_id is null
;

HTH
Viele Grüße mal wieder
payx
Last edited: 2017-05-21 11:14:20 +0200 (CEST)

View full thread SQLite - IDs aus zwei Tabellen anhand von anderen Spaltenwerte in dritte Tabelle eintragen