Mysql 使用表B中字段的最大值更新表a中的字段

Mysql 使用表B中字段的最大值更新表a中的字段,mysql,sql,join,sql-update,Mysql,Sql,Join,Sql Update,我想用“table_B”中字段“field_B”存在的最大值更新表“table_a”中的字段,我们称之为“field_a”,但前提是表“table_B”中字段“field_B”存在最大值 表“Table_B”有一个“reference”字段,其中包含要更新的表a记录的“id” 现在我有了下面的查询,它非常有效 UPDATE table_A a SET a.field_A = (SELECT MAX(b.field_B) FROM table_B WHERE b.reference =

我想用“table_B”中字段“field_B”存在的最大值更新表“table_a”中的字段,我们称之为“field_a”,但前提是表“table_B”中字段“field_B”存在最大值

表“Table_B”有一个“reference”字段,其中包含要更新的表a记录的“id”

现在我有了下面的查询,它非常有效

UPDATE table_A a SET a.field_A = (SELECT MAX(b.field_B) 
    FROM table_B WHERE b.reference = a.id) 
WHERE a.id IN (
    SELECT reference
    FROM table_B
    GROUP BY reference
    HAVING COUNT(reference) > 0
)
因此,它只会在找到该引用的记录时更新字段_A,因为我不想在没有找到相关记录时将字段“field_A”设置为零

正如我前面所说的,这个查询已经很好地工作了,但是现在我不得不对表_B运行两次查询,这似乎有点低效,而且可能只使用一个join语句就可以完成,但我似乎无法解决这个问题


由于此查询必须交叉引用大量记录,因此性能在这里确实是一个问题。

使用这两个嵌套语句,您的更新语句看起来非常
对我来说效率很低。请尝试下面的SQL语句,这应该可以完成任务。

SQL Fiddle在此:


JOIN不会通过影响性能而增加查询执行时间吗?@Akanksha不会,这比OP的尝试要好。无论如何,您至少需要一个加入。@Akanksha我也不是:)@peter.petrov谢谢peter,这正是我的意思,正如我所预料的,它确实会在性能方面产生影响。我试图尽可能一般化地表述这个问题,我希望它是清楚的:)。
UPDATE table_A a1

JOIN 

(

    SELECT a.id as id, max(b.field_B) as max_val
    FROM
    table_A a
    LEFT JOIN table_B b ON a.id = b.reference 
    GROUP BY a.id

) t on a1.id = t.id

SET

a1.field_A = t.max_val

WHERE

(t.max_val IS NOT NULL)