To delete rows in a table that do not match a row in another table:
DELETE FROM table1 WHERE id NOT IN (SELECT id from table2);
------
To create an updatable view:
create view testview as select *, _rowid_ as _rowid_ from test order by a
(note the extra _rowid_ column - you must say "as _rowid_")
The order by clause can be anything
for each column:
crate trigger
instead of update of on
for each row
begin update set = new.
where ._rowid_ = old._rowid_ ;
end
to add rows:
create trigger insert
instead of insert on
for each row
begin insert into values(new.a,new.b,new.c); -- one for each column
end
create table test(a,b,c)
create view testview as select *, _rowid_ as _rowid_ from test order by a
drop trigger testa
CREATE TRIGGER testa
instead of update of a on testview
for each row
begin update test set a = new.a where test._rowid_ = old._rowid_
;
end
To create an updatable view:
create view testview as select *, _rowid_ as _rowid_ from test order by a
(note the extra _rowid_ column - you must say "as _rowid_")
The order by clause can be anything
Then, for each column, add a trigger like:
create trigger testa
instead of update of a on testview
for each row
begin update test set a = new.a where test._rowid_ = old._rowid_;
end
For adding rows add a trigger:
create trigger testinsert
instead of insert on testview
for each row
begin insert into test values(new.a,new.b,new.c);
end
-----styles-----
create view stylesview as
select *, _rowid_ as _rowid_ from styles
order by selector, property, value
create trigger stylesselector
instead of update of selector on stylesview
for each row
begin update styles set selector = new.selector
where styles._rowid_ = old._rowid_;
end
create trigger stylesproperty
instead of update of property on stylesview
for each row
begin update styles set property = new.property
where styles._rowid_ = old._rowid_;
end
create trigger stylesvalue
instead of update of value on stylesview
for each row
begin update styles set value = new.value
where styles._rowid_ = old._rowid_;
end
create trigger stylescomment
instead of update of comment on stylesview
for each row
begin update styles set comment = new.comment
where styles._rowid_ = old._rowid_;
end
create trigger stylesinsert
instead of insert on stylesview
for each row
begin insert into styles values(new.selector,new.property,new.value,new.comment);
end
-----substitutions-----
create view substitutionsview as
select *, _rowid_ as _rowid_ from substitutions
order by pageset
create trigger substitutionspageset
instead of update of pageset on substitutionsview
for each row
begin update substitutions set pageset = new.pageset
where substitutions._rowid_ = old._rowid_;
end
create trigger substitutionssubstitutions
instead of update of substitutions on substitutionsview
for each row
begin update substitutions set substitutions = new.substitutions
where substitutions._rowid_ = old._rowid_;
end
create trigger substitutionscomment
instead of update of comment on substitutionsview
for each row
begin update substitutions set comment = new.comment
where substitutions._rowid_ = old._rowid_;
end
create trigger substitutionsinsert
instead of insert on substitutionsview
for each row
begin insert into substitutions values(new.pageset,new.substitutions,new.comment);
end
-----pagesets-----
-----scripts-----
-----all-----
create table views(tablename, position, column) -- done first
create table vieworder(tablename, tableorder) -- done first
drop table if exists temp.s
create temp table s as
select * from views, vieworder using(tablename)
order by tablename, position
select null, tablename, group_concat(column), tableorder from s group by tablename
select null, tablename, column from views
$1 table
$2 row or rows -- rows are new.a,new.b,new.c
$3 sort order
For each table:
drop view if exists $1view
create view $1view as
select *, _rowid_ as _rowid_ from $1
order by $3
create trigger $1insert
instead of insert on $1view
for each row
begin insert into $1 values($2);
end
create trigger $1delete
instead of delete on $1view
for each row
begin delete from $1
where $1._rowid_ = old._rowid_;
For each table/column:
drop trigger if exists $1$2
create trigger $1$2
instead of update of $2 on $1view
for each row
begin update $1 set $2 = new.$2
where $1._rowid_ = old._rowid_;
end