2013-11-01 8 views
0

У меня есть следующий код SQL:SQL Обновление таблицы с помощью представления

SELECT 
    `table1`.`field1` 
    , `view1`.`newfield1` 
FROM 
    `table1` 
INNER JOIN `GCOTDA2`.`view1` 
     ON (`table1`.`id1` = `view1`.`id1`) AND (`table1`.`id2` = `view1`.`id2`); 

Запрос работает нормально, но теперь я хочу, чтобы скопировать view1.newfield1 в table1.field1. Таким образом, я написал следующее заявление:

UPDATE `table1` 
SET 
    `table1`.`field1` = `view1`.`newfield1` 
FROM 
    `table1` 
INNER JOIN `view1` 
     ON (`table1`.`id1` = `view1`.`id1`) AND (`table1`.`id2` = `view1`.`id2`); 

Однако обновление не работает, и я получил сообщение об ошибке:

Error Code: 1064 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM 
    `table1` 
    INNER JOIN `view1` 
' at line 4 

я проверил на Google и другие вопросы на этом сайте, таких как: How do I UPDATE from a SELECT in SQL Server? и Error Code: 1064 in mysql не повезло. (MySQL Server 5.5.27) Мне нужен кто-то, чтобы осветить меня, спасибо!

ответ

1

Попробуйте это для размера:

UPDATE 'table1` t JOIN `view1` v 
ON  t.id1 = v.id1 AND t.id2 = v.id2 
SET  t.field1 = v.newfield1 
+0

Спасибо! Это работает, но можете ли вы объяснить мне, почему мой код не работает? еще раз спасибо! – Emer

1

Вы можете сделать это с помощью подзапроса:

update 
    table1 
set 
    table1.field1 = (select view1.newfield1 from view1 where view1.id1 = table1.id1 and view1.id2 = table1.id2) 
where 
    exists (select null from view1 where view1.id1 = table1.id1 and view1.id2 = table1.id2) 

http://sqlfiddle.com/#!2/64774/1/0

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