"P Kishor" wrote... > On 12/20/08, jose isaias cabrera <cabr...@wrc.xerox.com> wrote: >> >> Greetings! >> >> Imagine these rows in a table named LSOpenJobs: >> >> id, PID,subject, bdate, edate, lang,job >> 1, 232,2008-01-01,2008-01-10,es,trans >> 2, 232,2008-01-01,2008-01-10,fr,trans >> 3, 232,2008-01-01,2008-01-10,it,trans >> 4, 232,2008-01-01,2008-01-10,es,val >> 5, 232,2008-01-01,2008-01-10,fr,val >> 6, 232,2008-01-01,2008-01-10,it,val >> >> What I would like to do is to create a trigger to update the bdate for >> the >> 'val' job of the same lang and same PID, with the edate of the 'trans' >> job >> of same lang and same PID. For example, in this case above, let's take >> id >> 1; the bdate for the 'val' job with the 'es' lang with the same PID, id >> 4, >> should be updated with the edate of id 1. So, the trigger should UPDATE >> the >> table to this, >> >> id, PID,subject, bdate, edate, lang,job >> 1, 232,2008-01-01,2008-01-10,es,trans >> 2, 232,2008-01-01,2008-01-10,fr,trans >> 3, 232,2008-01-01,2008-01-10,it,trans >> 4, 232,2008-01-10,2008-01-10,es,val >> 5, 232,2008-01-10,2008-01-10,fr,val >> 6, 232,2008-01-10,2008-01-10,it,val >> >> The trigger example in the site expects to change the same row. This >> UDPATE >> is based on other rows of the same table and same PID. >> >> Any help is greatly appreciated. >> > > > José, > > Consider the following > > [04:43 PM] ~$sqlite3 > SQLite version 3.5.9 > Enter ".help" for instructions > sqlite> CREATE TABLE foo (id, PID, bdate, edate, lang,job); > sqlite> INSERT INTO foo VALUES (1, > 232,'2008-01-01','2008-01-10','es','trans'); > sqlite> INSERT INTO foo VALUES (2, > 232,'2008-01-01','2008-01-10','fr','trans'); > sqlite> INSERT INTO foo VALUES (3, > 232,'2008-01-01','2008-01-10','it','trans'); > sqlite> INSERT INTO foo VALUES (4, > 232,'2008-01-01','2008-01-10','es','val'); > sqlite> INSERT INTO foo VALUES (5, > 232,'2008-01-01','2008-01-10','fr','val'); > sqlite> INSERT INTO foo VALUES (6, > 232,'2008-01-01','2008-01-10','it','val'); > sqlite> UPDATE foo SET bdate = (SELECT f2.edate FROM foo f1 JOIN foo > f2 ON f1.PID = f2.PID AND f1.lang = f2.lang WHERE f1.job = 'val' AND > f2.job = 'trans' AND f1.id = foo.id) WHERE foo.job = 'val'; > sqlite> SELECT * FROM foo; > 1|232|2008-01-01|2008-01-10|es|trans > 2|232|2008-01-01|2008-01-10|fr|trans > 3|232|2008-01-01|2008-01-10|it|trans > 4|232|2008-01-10|2008-01-10|es|val > 5|232|2008-01-10|2008-01-10|fr|val > 6|232|2008-01-10|2008-01-10|it|val > sqlite> > > The UPDATE statement above seems to do what you want. Convert that to > a TRIGGER if you so want, but realize that the TRIGGER is supposed to, > well, trigger on some event such as UPDATE or INSERT or DELETE. Other > than that, the above should get you going. >
Thanks, Puneet. I can work with this. josé _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users