#mysql #sql #database #syntax
#mysql #sql #База данных #синтаксис
Вопрос:
Я пытаюсь написать SQL-запрос для обновления поля в другой базе данных (размещенной на том же сервере с phpMyAdmin). Я просто хочу, чтобы он обновил самую последнюю строку, так как запрос будет выполняться непосредственно после добавления нового пользователя (для этого нового пользователя). Моя цель состоит в том, чтобы изменить поле имени пользователя этого пользователя таким же, как поле электронной почты пользователя в исходной базе данных. Синтаксическая ошибка гласит
‘синтаксис для использования рядом’ ИЗ db2.users КАК «данные», ГДЕ db1.user.email = …’ в строке 3′
Я не вижу, где я ошибаюсь — я видел другой ответ, в котором пользователь сказал, что MySQL не поддерживает ключевое слово FROM , однако я не смог найти больше нигде, что подтверждает это. Это то, что у меня сейчас есть для моего кода:
UPDATE db1.user
SET username = data.username
FROM db2.users AS "data"
WHERE db1.user.email = data.email
AND db1.user.id = (
SELECT MAX(id)
FROM db1.user
)
LIMIT 1
Если кто-нибудь знает, где я ошибаюсь в этом, я был бы очень признателен!
Комментарии:
1. SET появится позже в MySQL
Ответ №1:
В MySQL синтаксис будет:
UPDATE db1.user u JOIN
db2.users u2
ON u.email = u2.email JOIN
(SELECT MAX(u2.id) as max_id
FROM db1.user u2
) uu
ON uu.max_id = u.id
SET u.username = u2.username;
Примечания:
Кажется странным, что вы не фильтруете по электронной почте, чтобы получить максимум id
, но именно так сформулирован ваш вопрос. Кроме того, MySQL не поддерживает LIMIT
запросы с несколькими таблицами UPDATE
.
Комментарии:
1. Я поиграл с этим, однако все еще получаю сообщение об ошибке
syntax to use near '"data" ON u.email = data.email JOIN (SELECT MAX(u2.id) as max_id FROM ...' at line 2
Причина, по которой я не фильтрую по электронной почте, чтобы получить максимальный идентификатор, заключается в том, что я новичок в SQL, я рассмотрю возможность его изменения, чтобы сделать это вместо этого, предполагая, что это лучшая практика. Я также поиграю и посмотрю, смогу ли я решить эту синтаксическую ошибку, хотя дайте мне знать, если у вас есть какие-либо другие указания. Приветствия2. @
"data"
Raaa … в любом случае, кажется, это действительно плохой выбор для псевдонима таблицы, поэтому я просто изменил его на что-то более разумное.3. Спасибо за это — у меня было установлено значение «данные» только для того, чтобы его было немного легче читать, поскольку я унаследовал эту базу данных с кучей длинных и запутанных имен! Предложенный вами SQL работает отлично, спасибо за это. Похоже, мне нужно изучать / практиковать свои объединения! Еще раз спасибо
Ответ №2:
Поскольку в вашем SQL вы согласны с использованием подзапросов, я бы предложил попробовать следующее:
UPDATE
db1.user
SET
username = (
SELECT
data.email
FROM
db2.users AS "data"
WHERE
db1.user.email = data.email)
WHERE
db1.user.id = (
SELECT
MAX(id)
FROM
db1.user)
LIMIT 1;