开发者

updating a column with avg data from another table column

i wrote a co开发者_开发技巧mmand like this to update a column in one table with avg of columns from another table.. its giving errors

UPDATE college_rating,products set 
property1_avg =  avg(college_rating.rating1),
property2_avg =  avg(college_rating.rating2),
property3_avg =  avg(college_rating.rating3),
property4_avg =  avg(college_rating.rating4),
property5_avg =  avg(college_rating.rating5),
property6_avg =  avg(college_rating.rating6),
property7_avg =  avg(college_rating.rating7),
property8_avg =  avg(college_rating.rating8),
property9_avg =  avg(college_rating.rating9),
property10_avg =  avg(college_rating.rating10),
property11_avg =  avg(college_rating.rating11),
property12_avg =  avg(college_rating.rating12),
property13_avg =  avg(college_rating.rating13),
property14_avg =  avg(college_rating.rating14),
property15_avg =  avg(college_rating.rating15) 
where products.alias = concat(college_rating.property1,'-',college_rating.property2,'-',college_rating.property3) 
group by college_rating.property1,college_rating.property2, college_rating.property3


The MySQL multi-table update syntax does not allow the use of group by.

You can accomplish what you are trying to do by moving the aggregation into a sub-query and joining to that sub-query in the multi-table-update instead.

Something like this should work:

update products p
inner join (
  select concat(property1,'-',property2,'-',property3) as alias,
  avg(rating1) as property1_avg,
  avg(rating2) as property2_avg,
  avg(rating3) as property3_avg,
  avg(rating4) as property4_avg,
  avg(rating5) as property5_avg,
  avg(rating6) as property6_avg,
  avg(rating7) as property7_avg,
  avg(rating8) as property8_avg,
  avg(rating9) as property9_avg,
  avg(rating10) as property10_avg,
  avg(rating11) as property11_avg,
  avg(rating12) as property12_avg,
  avg(rating13) as property13_avg,
  avg(rating14) as property14_avg,
  avg(rating15) as property15_avg 
  from college_rating
  group by property1,property2, property3
) as r on r.alias = p.alias
set p.property1_avg = r.property1_avg,
p.property2_avg = r.property2_avg,
p.property3_avg = r.property3_avg,
p.property4_avg = r.property4_avg,
p.property5_avg = r.property5_avg,
p.property6_avg = r.property6_avg,
p.property7_avg = r.property7_avg,
p.property8_avg = r.property8_avg,
p.property9_avg = r.property9_avg,
p.property10_avg = r.property10_avg,
p.property11_avg = r.property11_avg,
p.property12_avg = r.property12_avg,
p.property13_avg = r.property13_avg,
p.property14_avg = r.property14_avg,
p.property15_avg = r.property15_avg;


What is the error that you get? And you need to have a WHERE clause unless you want the UPDATE query to apply to ALL the records


I think you'd need to use sub queries, and I'm not sure if you can update two tables like that in MySQL, at least not without prefixing the attributes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜