On 2016/01/24 10:15 PM, audio muze wrote:
> I have a large table with ~350k records for which I'm in the process of
> standardising data.

350k records is not exactly a "large" table, A table scan would complete 
in a couple of seconds on a normal system. 350 million rows are more 
substantial and would require more care.

The rest of your explanation is a bit hard to follow, but if I 
understand correct, You have a field (albumartist) which you have 
somehow corrected from the original by creating a new table 
(albumartists) with the old and new fields.

Once the field has been corrected and saved (in newalbumartist) you 
would like to update these new values to the original database but fear 
messing things up (a good fear) and so would like to know whether it is 
safe to run the query, which you've already made and which seemingly 
works, on the original DB without making mistakes and you want us to 
tell you whether we see any problems that might bite you looking at your 
update query. Right?

I have some weird news for you - We don't really know, nobody here is 
above making mistakes, so what we all do is make backups and then try 
the big updates and restore where necessary, until it works.

There are however better ways to do that update more directly, but first 
things first: You need to back-up the database. Luckily in SQLite you 
can simply close all open connections to it and copy the files to 
another folder. 350k records should be a small file. You may optionally 
use a DB Manager to back it up - I am not familiar with SQLite Studio 
but I'm sure they have it. If not, you could try SQLitespeed (which 
definitely has it and you can back up multiple versions and test-run 
scripts before committing).

Your update query seems fine - if I may add one comment, please qualify 
all the field references so you can't refer a wrong field that might end 
up in scope. I doubt your query will have that problem, but it is a 
safer practice.
Something like this perhaps:

    UPDATE audio SET audio.albumartist = (
         SELECT A.newalbumartist
           FROM albumartists AS A
          WHERE A.albumartist = audio.albumartist
       )
      WHERE audio.albumartist IN (SELECT B.albumartist FROM albumartists AS B);


Should do the trick - but find a way to check after the run completes, 
and restore a backup if needed and retry or ask again if things seem awry.

Cheers,
Ryan


Reply via email to