在MySQL中使用子查询中的数据更新多列

在MySQL中使用子查询中的数据更新多列,mysql,subquery,average,Mysql,Subquery,Average,我试图用子查询中多列的数据更新一行中的多列 以下方法不适用于我,我无法找到适合我需要的不同方法: UPDATE beers, (SELECT AVG(appearance) AS appearance, AVG(palate) AS palate, AVG(taste) AS taste, AVG(aroma) AS aroma, AVG(overall) AS overall, beer_id FROM reviews) AS review_total SET beer

我试图用子查询中多列的数据更新一行中的多列

以下方法不适用于我,我无法找到适合我需要的不同方法:

UPDATE
    beers,
    (SELECT AVG(appearance) AS appearance, AVG(palate) AS palate, AVG(taste) AS taste, AVG(aroma) AS aroma, AVG(overall) AS overall, beer_id FROM reviews) AS review_total
SET
    beers.appearance = review_total.appearance, 
    beers.palate = review_total.palate, 
    beers.taste = review_total.taste, 
    beers.aroma = review_total.aroma, 
    beers.overall = review_total.overall
WHERE
    review_total.beer_id = beers.id
AND
    beers.id = 43
我没有收到此错误,但有5条警告,且该行未更新:

Query OK, 0 rows affected, 5 warnings (0.01 sec)
显示警告给我:

+-------+------+----------------------------------------------------+
| Level | Code | Message                                            |
+-------+------+----------------------------------------------------+
| Note  | 1265 | Data truncated for column 'appearance' at row 9991 |
| Note  | 1265 | Data truncated for column 'palate' at row 9991     |
| Note  | 1265 | Data truncated for column 'taste' at row 9991      |
| Note  | 1265 | Data truncated for column 'aroma' at row 9991      |
| Note  | 1265 | Data truncated for column 'overall' at row 9991    |
+-------+------+----------------------------------------------------+
我知道这个问题与数据类型有关,但数据类型是float,我相信AVG的结果也是这样:

mysql> describe beers;
+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       | NO   | PRI | NULL    | auto_increment |
| name        | varchar(90)   | YES  |     | NULL    |                |
| aroma       | float         | YES  |     | NULL    |                |
| appearance  | float         | YES  |     | NULL    |                |
| palate      | float         | YES  |     | NULL    |                |
| taste       | float         | YES  |     | NULL    |                |
| overall     | float         | YES  |     | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+
下一个查询略有不同:

UPDATE
    beers
SET
    beers.appearance = review_total.appearance, 
    beers.palate = review_total.palate, 
    beers.taste = review_total.taste, 
    beers.aroma = review_total.aroma, 
    beers.overall = review_total.overall
FROM
    INNER JOIN (SELECT AVG(appearance) AS appearance, AVG(palate) AS palate, AVG(taste) AS taste, AVG(aroma) AS aroma, AVG(overall) AS overall, beer_id FROM reviews) review_total ON review_total.beer_id = beers.id
WHERE
    beers.id = 43
我得到的这个错误是:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM INNER JOIN (SELECT AVG(appearance) AS appearance, AVG(palate) AS palate, AV' at line 9
我真的找不到一个办法让它工作,我希望有人看到我做错了什么。提前非常感谢

  UPDATE beers b
    JOIN 
       ( SELECT beer_id
              , AVG(appearance) appearance
              , AVG(palate) palate
              , AVG(taste) taste
              , AVG(aroma) aroma
              , AVG(overall) overall
              , beer_id 
           FROM reviews
          GROUP
             BY beer_id
       ) review_total 
      ON review_total.beer_id = b.id
     SET b.appearance = review_total.appearance
       , b.palate = review_total.palate
       , b.taste = review_total.taste
       , b.aroma = review_total.aroma
       , b.overall = review_total.overall
   WHERE b.id = 43;

或者类似的

你用浮点数来给啤酒评分?你在喝什么?你该喝杯啤酒!谢谢:)好的,那么“从啤酒中选择b.*加入r.beer上的r.beer_id=b.id订单,按总体描述,味道描述限制1;”的结果是什么?Westvleteren 12(XII),ABV为10.2%,这名来自比利时Westvleteren的Trappist是整体评级最高的选择,并且在这些选择中具有最好的评级品味。要想获得真正的满足感,人们应该从特拉普派的玻璃杯里喝下这种带有光滑焦糖味道的黑啤酒,这已经不是什么秘密了。不要太匆忙,小口啜饮,倒少量的水来享受整个饮酒过程中的白色泡沫。嗯,我想知道是否有一种更容易掌握的方法?