I've been able to get my code runing by changing it to the following:
update relation
set wamapname = (select wrk.mapname
from waPSM_TABLE_MAPNAME_WRK as wrk
inner join relation as rel
on wrk.queryid = 1
and wrk.queryid = rel.queryid
and wrk.tablename = rel.name
inner join User_Database as udb
on wrk.databasename = udb.udb_name
and rel.udb_key = udb.udb_key
where relation.udb_key = udb.udb_key
and relation.tablename = rel.tablename)
where queryid = 1;
This is using a correlated sub-query to ensure that I update the correct rows
in the target table (the 'relation' table). I have to do some more testing but
so far it looks to be working correctly.
So I guess now my question is when/how would I use a CTE in an UPDATE statement?
My reading of the syntax diagram (http://www.sqlite.org/lang_update.html )
shows that the CTE is valid syntax.
Can anyone please give me an example (doesn’t need to use my tables) where a
CTE can be used with the UPDATE?
Cheers,
Dave
Ward Analytics Ltd - information in motion
Tel: +44 (0) 118 9740191
Fax: +44 (0) 118 9740192
www: http://www.ward-analytics.com
Registered office address: The Oriel, Sydenham Road, Guildford, Surrey, United
Kingdom, GU1 3SR
Registered company number: 3917021 Registered in England and Wales.
-----Original Message-----
From: sqlite-users [mailto:[email protected]] On
Behalf Of David Wellman
Sent: 04 September 2017 11:23
To: 'SQLite mailing list'
Subject: [sqlite] Syntax error using CTE and UPDATE
Hi,
(I have a feeling that this will be depressingly simple - but I just can't
see it right now.)
The following code is failing with: Error: near line 3: no such column:
dtls.mapname2
explain
with dtls as (select distinct wrk.mapname as mapname2
,udb.udb_key
,rel.tablename
,rel.queryid
from waPSM_TABLE_MAPNAME_WRK as wrk
inner join relation as rel
on wrk.queryid = 1
and wrk.queryid = rel.queryid
and wrk.tablename = rel.name
inner join User_Database as udb
on wrk.databasename = udb.udb_name
and rel.udb_key = udb.udb_key)
update relation
set wamapname = dtls.mapname2
where queryid = dtls.queryid
and udb_key = dtls.udb_key
and tablename = dtls.tablename;
I'm running it using the windows 32-bit shell program v3.20.1
If I just run the CTE component by itself it runs fine.
What am I missing?
All help greatly appreciated,
Dave
_______________________________________________
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