2013-02-09 5 views
1

Я пытаюсь ОБНОВИТЬ таблицу, основанную на подзапросе. Поэтому мне нужен результат суб-запроса в качестве параметров в инструкции UPDATE.UPDATE на основе результата SELECT

Я попытался ниже без успеха:

UPDATE xx 
INNER JOIN (
    SELECT r.id as id, w.state as state 
    ... 
) yy 
SET xx.state = yy.state WHERE xx.id = yy.id; 

EDIT: Полный запрос:

UPDATE dpcio_request xx 
INNER JOIN (
    SELECT r.id as id, w.state as state 
    FROM dpcio_request r 
    JOIN dpcio_request_wf w 
    ON (w.dpcio_request_id = r.id) 
    WHERE w.id IN (SELECT MAX(id) 
      FROM `dpcio_request_wf` 
      GROUP BY dpcio_request_id) 
    ) r2 ON r1.id = r2.id 
) yy ON yy.id = xx.id 
SET xx.state = yy.state; 

ответ

4

, если у вас нет специального расчета на вложенный запрос и предполагая, что это от другого стол, вы можете напрямую присоединиться к столам,

UPDATE table1 a 
     INNER JOIN table2 b 
      ON a.id = b.id 
SET a.colName = b.value 

UPDATE 1

вот упрощенная версия запроса,

UPDATE dpcio_request a 
     INNER JOIN dpcio_request_wf b 
      ON a.id = b.dpcio_request_wf 
     INNER JOIN 
     (
      SELECT dpcio_request_id, MAX(id) max_ID 
      FROM dpcio_request_wf 
      GROUP BY dpcio_request_id 
     ) c ON b.id = c.max_ID AND 
       b.dpcio_request_id = c.dpcio_request_id 
SET  a.state = b.state 
+1

как насчет соединения таблицы 'dpcio_request' непосредственно с' dpcio_request_wf' и вычисления на макс ид на вложенный запрос? –

+0

работал, спасибо ...! – normalUser

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