将值从表传递到另一个表

时间:2016-03-31 21:22:19

标签: mysql

我有这张桌子,它的名字是puntajes:

+---------------+---------------+---------+
| estudiante_ID | evaluacion_ID | puntaje |
+---------------+---------------+---------+
|             1 |             1 |      15 |
|             2 |             1 |      11 |
|             3 |             1 |      17 |
|             4 |             1 |      12 |
|             1 |             2 |      13 |
|             2 |             2 |       8 |
|             3 |             2 |      15 |
|             4 |             2 |      16 |
|             1 |             3 |       9 |
|             2 |             3 |      14 |
|             3 |             3 |       9 |
|             4 |             3 |      10 |
|             1 |             4 |      15 |
|             2 |             4 |      16 |
|             3 |             4 |       9 |
|             4 |             4 |      12 |
+---------------+---------------+---------+

我想从puntaje列得到最高得分,其中evaluateacion_ID等于3,我希望这个值在evaluateaciones表的'maxpuntaje'列中,就像更新一样,这是evaluateaciones表:

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| fecha         | date             | NO   |     | NULL    |                |
| tipo          | enum('P','E')    | NO   |     | NULL    |                |
| maxpuntaje    | int(11)          | NO   |     | NULL    |                |
| clase_ID      | int(10) unsigned | NO   |     | NULL    |                |
| evaluacion_ID | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
+---------------+------------------+------+-----+---------+----------------+

两个表都有evaluateacion_ID列

2 个答案:

答案 0 :(得分:2)

我已经注释掉了限制UPDATE和最大puntaje值检索的WHERE条件,以便可以为所有evaluacion_ID运行查询。如果只需要3,请删除注释标记。

使用MySQL UPDATE JOIN语法:

UPDATE evaluaciones e
LEFT JOIN (
  SELECT evaluacion_ID, MAX(puntaje) maxpuntaje
  FROM puntajes
  -- WHERE evaluacion_ID = 3
  GROUP BY evaluacion_ID
  ) p USING (evaluacion_ID)
SET maxpuntaje = p.maxpuntaje
-- WHERE e.evaluacion_ID = 3

答案 1 :(得分:1)

我怀疑你正在寻找这个问题:

UPDATE evaluaciones
SET maxpuntaje = (
  SELECT max(puntaje)
  FROM puntajes
  WHERE evaluacion_ID = evaluaciones.evaluacion_ID
)
WHERE evaluacion_ID = 3