2015-12-02 3 views
0

У меня есть следующая установка таблицы, две таблицы, связанные с промежуточной таблицы, как это:Обновление таблицы из другой таблицы Повсеместно промежуточную таблицу Mysql

Client

| 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

| 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 из-за intermeditate table.Could кто-нибудь объяснить, как с этим бороться?

Заранее спасибо.

ответ

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 

Однако, иметь в виду, что имеют те же данные в двух местах, не является хорошей практикой; если возможно, всегда ставить один факт только в одном месте.

+0

Действительно, все записи в таблице proyect уже включены. Когда мне удастся скопировать данные, я смогу удалить поле с клиента –

+0

Ну вы можете скопировать данные, как показано в моем коде –

Смежные вопросы