Both queries update all rows in QR3PARAMS since there is no WHERE clause to 
limit which rows are updated, so when you say "does less updates" what do you 
mean, since it is manifestly impossible for one to do less updates than the 
other -- both update every row or the table.

Secondly, in the first update, the subquery is only executed if QR3PARAMS.ED != 
1 so therefore the clause "QR3PARAMS.ED = 1" in the where clause of the 
subquery will always be false and is therefore meaningless and serves only to 
consume CPU to no effect.

The difference between them is that the second one will update the QR3PARAMS to 
NULL if there are no CURRENT_MED rows with an ID = QR3PARAMS.ID even if 
QR3PARAMS.ED = 1, while in the first one this will not occur (QR3PARAMS.ED will 
be set to 1).

-- 
The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
lot about anticipated traffic volume.

>-----Original Message-----
>From: sqlite-users <sqlite-users-boun...@mailinglists.sqlite.org> On
>Behalf Of Bart Smissaert
>Sent: Wednesday, 13 November, 2019 04:41
>To: General Discussion of SQLite Database <sqlite-
>us...@mailinglists.sqlite.org>
>Subject: [sqlite] Why do these 2 updates give different results?
>
>UPDATE QR3PARAMS SET ED =
>CASE WHEN ED = 1 THEN 1
>ELSE
>(SELECT 1 FROM CURRENT_MED WHERE
>(QR3PARAMS.ED = 1 OR TERM_TEXT GLOB 'Sildenafil*' OR TERM_TEXT GLOB
>'Tadalafil*' OR TERM_TEXT GLOB 'Vardenafil*')
>AND ID = QR3PARAMS.ID LIMIT 1) END
>
>UPDATE QR3PARAMS SET ED =
>(SELECT 1 FROM CURRENT_MED WHERE
>(QR3PARAMS.ED = 1 OR TERM_TEXT GLOB 'Sildenafil*' OR TERM_TEXT GLOB
>'Tadalafil*' OR TERM_TEXT GLOB 'Vardenafil*')
>AND ID = QR3PARAMS.ID LIMIT 1)
>
>Number 1 seems the most logical one and gives me the right answer.
>Number 2 does less updates, but not sure why this should be.
>
>RBS
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to