Обновить мою базу данных из Выбрать результат - PullRequest
0 голосов
/ 28 марта 2012
mysql> SELECT Ext, Pass, Name, Context FROM temp_Users WHERE temp_Users.Pass NOT IN (SELECT Pass FROM Users);
+------+-------+---------+------------+
| Ext  | Pass  | Name    | Context    |
+------+-------+---------+------------+
| 6003 | Hello | WebPone | DLPN_Admin |
+------+-------+---------+------------+
1 row in set (0.00 sec)


mysql> UPDATE Users
    -> SET (Pass, Name, Context) = (SELECT  Pass, Name, Context FROM temp_Users WHERE temp_Users.Pass NOT IN (SELECT Pass FROM Users))
    -> WHERE Users.Ext = temp.Ext;
ERROR 1064 (42000): 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 '(Pass, Name, Context) = (SELECT  Pass, Name, Context FROM temp_Users WHERE temp_' at line 2

Я хочу обновить свою базу данных из Выбрать результат, и я получаю эту ошибку.Пожалуйста, скажите мне, как я могу решить это?

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

MySQL не поддерживает синтаксис SET ( multiple_fields ) = ( subquery_that_returns_multiple_fields ) для операторов UPDATE.Вместо этого вы должны использовать обновление с несколькими таблицами (объединение).См. http://dev.mysql.com/doc/refman/5.6/en/update.html.

В вашем запросе есть и другие проблемы, поэтому я не совсем точно понимаю, что вы хотите.,,но я думаю, что вы хотите что-то вроде этого:

UPDATE users
  JOIN temp_users
    ON temp_users.ext = users.ext
   SET users.pass = temp_users.pass,
       users.name = temp_users.name,
       users.context = temp_users.context
 WHERE temp_users.pass NOT IN
        -- extra subquery to bypass MySQL limitation:
        ( SELECT pass
            FROM ( SELECT pass
                     FROM users
                 ) t
        )
;
2 голосов
/ 28 марта 2012
UPDATE Users u
JOIN temp_Users tu ON tu.Ext = u.Ext
SET 
    Pass = tu.Pass,
    Name = tu.Name,
    Context = tu.Context
WHERE tu.Pass NOT IN (
    SELECT Pass
    FROM Users
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...