2011-01-21 89 views
1

需要一些帮助,这个...我需要更新我的一个表中的一列,而不是正确的值填充0。有成千上万的条目,我想通过一个SQL脚本而不是PHP来做到这一点。帮助MySQL更新与子查询

作为示例,玩家表由列(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; 

我相当肯定这种说法是没有进行优化,并且可以清理。任何帮助将不胜感激!!!!

回答

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