Thanks Dan

I couldn't find a reference to this behaviour in the documentation.
Do you think it would be possible to add a few words?




On Mon, Feb 13, 2017 at 7:49 PM Dan Kennedy <[email protected]> wrote:

> On 02/13/2017 01:44 PM, Dudu Markovitz wrote:
> > Good morning
> >
> > While answering question on stackoverflow
> > <http://stackoverflow.com/a/42197036/6336479>I have noticed a bug
> related
> > to UPDATE using correlated sub-query.
> > The demonstration code can be found in the attached file bug_report.sql
> and
> > the results of the demonstration with some comments added are in
> > bug_reports.txt.
> >
> > I'm using SQLite 3.9.2 on windows 64 bit.
>
> It's surprising, but a consequence of the way SQLite has always worked.
> Consider:
>
>    CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
>    INSERT INTO t1 VALUES(1, 1);
>    INSERT INTO t1 VALUES(2, 0);
>
> Then:
>
>    UPDATE t1 SET b=(SELECT b+1 FROM t1 WHERE a=1);
>
> In this case, the sub-query is uncorrelated and "b" is set to 2 in both
> rows.
>
> But say you added some other term to the sub-query so that it was
> correlated. It is then executed separately for each row. So SQLite
> updates the first row (with a=1) and sets column "b" to 2. But then,
> when it goes to update the next row, it runs the correlated query a
> second time. And this time it returns 3. So you end up setting "b" in
> the second row to 3 instead of 2.
>
> Something pretty similar is occurring in the example you posted.
>
> Dan.
>
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to