Hello again, I think I can simplify the actual question: Can I use a SELECT returning multiple rows as input to some INSERT logic, and in that logic INSERT into multiple tables?
Like if I have a table t1 containing id 1, 2, 3. For each id in t1, do INSERT INTO t2 (...) INSERT INTO t3 (...) --But this depends on the last_insert_rowid() from the insert into t2 above The problem for me is that I don't know how to fetch the last_insert_rowid() needed for the t3 table. (If I didn't have to split up the insert I could simply run something like INSERT INTO t2 SELECT id FROM t1; ) Best Regards, Daniel Den 2015-09-24 kl. 13:31, skrev Marco: > Excerpts from Daniel Polski's message of 2015-09-24 07:38:24 -0300: >> Hello! >> >> --Table t1 contains some "base" data >> CREATE TABLE t1 ( >> id INTEGER PRIMARY KEY, >> name VARCHAR(10), >> value INT NOT NULL >> ); >> >> INSERT INTO t1 VALUES(1, 't1 1', 0); >> INSERT INTO t1 VALUES(2, 't1 2', 0); >> >> --Table t2 can contain extra data for a row in table t1 >> CREATE TABLE t2( >> id INTEGER PRIMARY KEY, >> t1_id INT NOT NULL, >> data INT NOT NULL, >> CONSTRAINT 'FK_t2_001' FOREIGN KEY( t1_id ) REFERENCES t1 ( id ) >> ); >> INSERT INTO t2 VALUES(1, 1, 10); >> INSERT INTO t2 VALUES(2, 1, 20); >> INSERT INTO t2 VALUES(3, 2, 30); >> >> CREATE TABLE t3 ( >> id INTEGER PRIMARY KEY, >> name VARCHAR(10) >> ); >> >> CREATE TABLE t4( >> t2_id INT NOT NULL, >> t3_id INT NOT NULL, >> CONSTRAINT 'FK_t4_001' FOREIGN KEY( t2_id ) REFERENCES t2 ( id ), >> CONSTRAINT 'FK_t4_002' FOREIGN KEY( t3_id ) REFERENCES t3 ( id ) >> ); >> >> >> >> -- Here is where my real question starts. Can I fetch a list of rows in >> a trigger >> -- and update different tables from that data? Im looking for some kind >> -- of looping over the rows found in t2, where I can insert data to t3 and >> -- t4 for each row found in t2. >> >> CREATE TRIGGER trigger_1 AFTER UPDATE OF value ON t1 >> WHEN new.value = 1 >> AND EXISTS (SELECT id FROM t2 WHERE t1_id = new.id) >> AND (some more rules) >> ... >> -- For each row in t2 with a t1_id referencing the t1 id, >> -- 1: insert a row into t3 >> -- 2: insert a row into t4 binding the newly created row in t3 to the >> corresponding row in t2 > may try this to insert into t3. > > CREATE TRIGGER trigger_on_table_1 > AFTER UPDATE OF value ON t1 > FOR EACH ROW WHEN NEW.VALUE = 1 AND EXISTS (SELECT id FROM te WHERE > ti_id = NEW.id) > BEGIN > > -- SELECT THE ROWS FROM t2 to insert values > INSERT INTO t3 VALUES(id, name) SELECT t2.t1_id, 'dummy' FROM t2 > WHERE t2.t1_id == NEW.id; > > END; > > Then you may wish to set a trigger to t4 itself to handle the newly > created t3 rows. >