sql - Update statement to set a column based the maximum row of another table -
i have family table:
select * family; id | surname | oldest | oldest_age ---+----------+--------+------- 1 | byre | null | null 2 | summers | null | null 3 | white | null | null 4 | anders | null | null the family.oldest column not yet populated. there table of children:
select * children; id | name | age | family_fk ---+----------+------+-------- 1 | jake | 8 | 1 2 | martin | 7 | 2 3 | sarah | 10 | 1 4 | tracy | 12 | 3 where many children (or no children) can associated 1 family. populate oldest column using update ... set ... statement sets name , oldest_age of oldest child in each family. finding name of each oldest child problem solved quite here: how can select rows max(column value), distinct column in sql?
however, don't know how use result of in update statement update column of associated table using h2 database.
the following ansi-sql syntax solves problem:
update family set oldest = (select name children c c.family_fk = f.id order age desc fetch first 1 row ) in h2, think use limit 1 instead of fetch first 1 row only.
edit:
for 2 columns -- alas -- solution 2 subqueries:
update family set oldest = (select name children c c.family_fk = f.id order age desc limit 1 ), oldest_age = (select age children c c.family_fk = f.id order age desc limit 1 ); some databases (such sql server, postgres, , oracle) support lateral joins can this. also, row_number() can solve problem. unfortunately, h2 doesn't support functionality.
Comments
Post a Comment