【发布时间】:2014-01-30 09:28:10
【问题描述】:
我想更新一个字段,我们称它为“field_A”,在表“table_A”中使用“table_B”中字段“field_B”的最大值,但只有当该字段有最大值时表 'table_B' 中的 field_B'。
表 'table_B' 有一个 'reference' 字段,其中包含我们要更新的 table_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
)
因此,如果找到该引用的记录,它只会更新 field_A,因为我不想在未找到相关记录时将字段“field_A”设置为零。
正如我之前所说,此查询已经完美运行,但现在我必须对 table_B 运行两次查询,这似乎有点效率低下,可能只用 1 个连接语句就可以做到,但我可以'似乎无法解决这个问题。
由于此查询必须交叉引用很多非常多的记录,因此性能在这里确实是一个问题。
【问题讨论】:
-
我试图将问题表述得尽可能笼统,我希望它很清楚:)。
标签: mysql sql join sql-update