Сначала создайте таблицу Table3
:
CREATE TABLE Table3 (
id INTEGER,
name TEXT,
createdat TEXT,
modifiedat TEXT,
PRIMARY KEY(id)
);
, а затем вставьте строки следующим образом:
insert into table3 (id, name, createdat, modifiedat)
select id, name, createdat, modifiedat from (
select * from table1 t1
where not exists (
select 1 from table2 t2
where t2.id = t1.id and t2.modifiedat >= t1.modifiedat
)
union all
select * from table2 t2
where not exists (
select 1 from table1 t1
where t1.id = t2.id and t1.modifiedat > t2.modifiedat
)
)
Используется UNION ALL
для 2 таблиц и получается только необходимые строки с EXISTS
, что является очень эффективным способом проверки желаемого условия.
У меня >=
вместо >
в предложении WHERE
для Table1
в случае, если в 2 таблицах есть строка с одинаковыми id
и одинаковыми modifiedat
значениями.
В этом случае будет вставлена строка из Table2
.
Если вы хотите объединить 2 таблицы в Table1
, вы можете использовать REPLACE
:
replace into table1 (id, name, createdat, modifiedat)
select id, name, createdat, modifiedat
from table2 t2
where
not exists (
select 1 from table1 t1
where (t1.id = t2.id and t1.modifiedat > t2.modifiedat)
)