Robert Poor <rdp...@gmail.com> wrote:
> On Fri, Apr 1, 2011 at 21:36, Igor Tandetnik <itandet...@mvps.org> wrote:
>> update table_a set avalue = (
>> select bvalue from table_b where akey=bkey
>> union all
>> select avalue);
> 
> That also works.  But at the risk of "moving the finish line during
> the race", I should point out that the original question was how to
> update entire records, not individual fields.

If possible, set up your table so that INSERT OR REPLACE works for it. E.g. 
declare "key" field unique, or primary key.

> DROP TABLE IF EXISTS `table_a`; CREATE TABLE `table_a` (`key` int(11),
> `value` float, `str` varchar(255));
> DROP TABLE IF EXISTS `table_b`; CREATE TABLE `table_b` (`key` int(11),
> `value` float, `str` varchar(255));
> ==================
> I'm looking for a construct that joins on the 'key' field, but updates
> both the 'value' and 'str' fields, with the result:
> 
> select * from table_a;
> 1 | 101.0 | 'apr'
> 2 | 102.0 | 'may'
> 3 |    3.0 | 'wed'

Assuming "key" is declared unique:

insert or replace into table_a(key, value, str)
select key, value, str from table_b;

If it's possible to have records in table_b without a match in table_a, and 
assuming you don't actually want to insert such records, then

insert or replace into table_a(key, value, str)
select b.key, b.value, b.str
from table_b b join table_a a on (a.key = b.key);

> (FWIW, both PostgreSQL and MySQL have extensions to UPDATE that make
> this possible w/o subqueries.

Yes, it is unfortunate that SQLite doesn't implement such an extension.
-- 
Igor Tandetnik

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

Reply via email to