обновление с помощью объединения в выберите не работает

0
update tableA 
set tableA.col3 = col2 
from (select tableA.col1, tableB.col2 from 
tableA inner join tableB on tableA.col1=tableB.col4 and 
tableA.col3!=tableB.col2 limit 10)  
where tableA.col1 = col1;

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'from (select...

Что не так с вышеуказанным обновлением, хотя ниже команда select отлично работает

select tableA.col1, tableB.col2 
from tableA 
inner join tableB on tableA.col1=tableB.col4 
    and tableA.col3!=tableB.col2 limit 10
  • 0
    Сколько строк вы хотите обновить, плюс почему вы используете запрос select с запросом на обновление?
  • 0
    @ NishantGupta Мне нужно обновить около 50 миллионов строк, и я хочу использовать лимит для обработки по частям, поэтому нужно использовать запрос выбора, любое другое решение?
Показать ещё 2 комментария
Теги:
sql-update

2 ответа

0

Попробуй это:

UPDATE tableA 
INNER JOIN tableB 
ON tableA.col1=tableB.col4 
AND 
tableA.col3!=tableB.col2
SET tableA.col3 = tableB.col2;

ИЛИ Использование запроса SELECT Поскольку я не понимаю, как вы хотите обновить tableA.

 UPDATE tableA 
 INNER JOIN (
             select tableA.col1, tableB.col2 
             from tableA 
             inner join tableB 
             on tableA.col1=tableB.col4 
             and tableA.col3!=tableB.col2 limit 10
            ) AS t
ON tableA.col1 = t.col1
SET tableA.col3 = t.col2

ОБЩИЙ СИНТАКСИС UPDATE с JOIN:

UPDATE T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1
SET T1.C2 = T2.C2, 
    T2.C3 = expr
WHERE condition
  • 0
    спасибо твой второй ответ сработал
  • 0
    Добро пожаловать @DevDev Если вы найдете это полезным, пожалуйста, примите это как ответ.
0

у вас есть некоторые пропущенные псевдонимы здесь

update tableA set tableA.col3=col2

Так должно быть

update tableA set tableA.col3= tableB.col2

и здесь

where tableA.col1=col1;

должно быть

where tableA.col1 = tableB.col1;
  • 0
    нет, добавление псевдонимов также не помогает
  • 0
    как насчет использования "где tableA.col1 = col4;", в последней части?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню