使用子查询帮助MySQL UPDATE

时间:2011-01-21 14:59:22

标签: mysql sql subquery

需要一些帮助...我需要在我的一个表中更新一个列,其中填充了0而不是正确的值。有成千上万的条目,我想通过SQL脚本而不是PHP来尝试这样做。

例如,播放器表由列(playerID,teamID,cityID和stateID)组成。体育场表有(statiumID,teamID,cityID和stateID)。 Table2中的cityID设置为0,但代码不正确。我知道我可以用子查询来解决这个问题,但我对这个概念比较陌生。我想出了以下内容,但我觉得它没有得到很好的优化:

UPDATE
`database1`.`stadium`
SET
`stadium`.`cityID` = 
(
    SELECT
        `player`.`cityID`
    FROM
        `database2`.`player`
    WHERE
        `player`.`teamID` = `stadium`.`teamID`
    AND
        `player`.`stateID` = `stadium`.`stateID`
)
WHERE
`stadium`.`cityID` = 0;

我很确定这个声明没有优化,可以清理。任何帮助将不胜感激!!!!

1 个答案:

答案 0 :(得分:2)

你想要这样的东西。

UPDATE
  database1.stadium AS s
INNER JOIN (
  SELECT DISTINCT teamID, stateID, cityID FROM database2.player
) AS p
USING (teamID, stateID)
SET
  s.cityID = p.cityID
WHERE
  s.cityID = 0