通过中间表Mysql从另一个表更新表

时间:2015-12-02 11:47:55

标签: mysql

我有下一个表设置,两个表由一个中间表相关,如下所示:

客户端

| client_id | ...|field_X |
| 1         | ...|value1  |
| 2         | ...|value2  |
| 3         | ...|value3  |

项目

| project_id | ...|field_X |
| 1          | ...|        |
| 2          | ...|        |
| 3          | ...|        |
| 4          | ...|        |
| 5          | ...|        |
| 6          | ...|        |
| 7          | ...|        |

client_project

| client_id | project_id|
|     1     |      2    |
|     1     |      3    |
|     2     |      4    |
|     2     |      5    |
|     3     |      6    |
|     3     |      7    |

表项目中的field_x是新的,我必须用表客户端的数据填充它以获得类似这样的内容:

项目

| project_id | ...|field_X |
| 1          | ...|        |
| 2          | ...|value1  |
| 3          | ...|value1  |
| 4          | ...|value2  |
| 5          | ...|value2  |
| 6          | ...|value3  |
| 7          | ...|value3  |

我不知道处理中间表的热点。我试过这段代码,但它不起作用。

INSERT INTO project  
(field_x)

(select field_x
from 
 client_project
  inner join
 client
  where client_project.client_id = client.client_id 
 );

我知道我必须做什么,但由于中间表,我无法将其转换为sql命令。有人可以解释如何处理它吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我假设您已经拥有project表中的所有条目但是它们缺少Field_X属性?所以你需要的是更新,而不是插入

UPDATE project p, client c, project_client pc SET p.Field_X=c.Field_X WHERE p.ID=pc.ProjectID AND c.ID=pc.ClientID

但是,请注意,在两个地方拥有相同的数据并不是一个好习惯;如果可能的话,总是只在一个地方放一个事实。