2015-04-14 65 views
1

我想要做的是使用从临时表中获取的值更新表。将临时表中的内容插入到更新查询中

见下面布局澄清:

我想要的用户名“测试”与ID = 1,变更为NEW_ID = 2的从临时表中的值。

Temporary table: 

--------------------------------------------------------- 
| username | old_id | new_id | directory | 
--------------------------------------------------------- 
| test  | 1  | 2  | old   | 
--------------------------------------------------------- 

Actual table: 

----------------------------------------- 
| username | id | directory | 
----------------------------------------- 
| test  | 1 | old   | 
| test  | 2 | new   | 
----------------------------------------- 

这是我迄今为止,但它的失败相当严重:

DROP TABLE IF EXISTS TMPRESULT; 

CREATE TEMPORARY TABLE IF NOT EXISTS TMPRESULT AS (
    SELECT 
    U.directory AS 'directory', 
    U.username AS 'Username', 
    U.ID AS 'old_id', 
    (
    SELECT 
    T1.id 
    FROM table1 AS T1 
    WHERE U.username = T1.username 
    AND T1.directory = 'new' 
) AS 'new_id' 
    FROM table1 AS U 
    WHERE U.directory = 'old' 
    AND U.username = 'test' 
); 

UPDATE table2 AS M 
SET 
    M.id = T.new_id 
FROM table2 
INNER JOIN TMPRESULT AS T ON M.child_id = T.old_id 
WHERE M.username = T.Username 

回答

2

这是在MySQL正确的语法:

UPDATE table2 M INNER JOIN 
     TMPRESULT T 
     ON M.child_id = T.old_id AND M.username = T.Username 
    SET M.id = T.new_id; 
相关问题