繁体   English   中英

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

[英]Updating multiple columns with data from subquery in MySQL

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

以下方法对我不起作用,我找不到适合我需求的其他方法:

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    |
+-------+------+----------------------------------------------------+

我知道这个问题与数据类型有关,但是数据类型是浮点的,我相信这就是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;

或类似的东西

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM