On 23 November 2011 11:23, nadavius <nadav...@yahoo.com> wrote:
>
> Hi guys,
>
> I have two tables T1, T2 - identical in fields [Index1 (INT), Index2(INT),
> Count(INT), Value(INT)]
> I would like to merge the content of T1 into T2 using the following ruels:
> 1. Copy into T2 data from T1 where Index1 AND Index2 (like two keys, PK and
> SK) do not exist in T2
> 2. In case that there are common rows between T1 and T2, where common means
> T1[Index1, Index2] and T2[Index1, Index2] are the same - update T2.Count and
> T2.Value ONLY IF T1.Count has a greater value
>
> I am looking for an efficient SQLite statement to make it work.

Can't speak for its efficiency, but this appears to do what you want:

SQLite version 3.4.2
Enter ".help" for instructions
sqlite>  create table t1( i1 integer, i2 integer, cnt integer, val
integer, primary key( i1, i2 ) );
sqlite>  create table t2( i1 integer, i2 integer, cnt integer, val
integer, primary key( i1, i2 ) );
sqlite> insert into t1 values( 1,1,1,1 );
sqlite> insert into t1 values( 2,1,2,2 );
sqlite> insert into t1 values( 3,1,1,3 );
sqlite> insert into t1 values( 4,1,5,4 );
sqlite>
sqlite> insert into t2 values( 1,1,0,111 );
sqlite> insert into t2 values( 4,1,6,444 );
sqlite>
sqlite>  create trigger t2_from_t1 before insert on t2 begin update t2
set cnt=new.cnt, val=new.val where t2.i1=new.i1 and t2.i2=new.i2 and
new.cnt > t2.cnt; end;
sqlite>
sqlite> select * from t1;
1|1|1|1
2|1|2|2
3|1|1|3
4|1|5|4
sqlite> select * from t2;
1|1|0|111
4|1|6|444
sqlite> insert or ignore into t2 select i1, i2, cnt, val from t1;
sqlite>
sqlite> select * from t1;
1|1|1|1
2|1|2|2
3|1|1|3
4|1|5|4
sqlite> select * from t2;
1|1|1|1                                             <== updated
4|1|6|444                                         <== unchanged
2|1|2|2                                             <== inserted
3|1|1|3                                             <== inserted
sqlite>

>
> Any ideas?
>
> Nadav.

Regards,
Simon
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to