2012-05-10 4 views
0

У меня есть два запроса. Первый будет возвращать несколько строк:Обновление Mysql с использованием значений из списка

SELECT parent_entry_id,child_entry_id FROM exp_playa_relationships WHERE parent_field_id = '34'; 

... И я хотел бы использовать значения (parent_entry_id, child_entry_id) и включить их в этот запрос, заменив «х» и «у», и сделать это для каждая строка возвращается первым запросом.

UPDATE exp_channel_data AS t1, 
(
SELECT field_id_46,field_id_47 FROM exp_channel_data WHERE entry_id = 'x') AS t2 
SET t1.field_id_60 = t2.field_id_46, t1.field_id_61 = t2.field_id_47 
WHERE t1.entry_id = 'y'; 

Я думаю, что мне нужно использовать другой JOIN, но я не могу понять, как реализовать его в моем примере. Любая помощь приветствуется.

ответ

0

Спасибо всем за ваши ответы. Рабочий синтаксис:

UPDATE exp_channel_data AS t1, 
(
SELECT 
entry_id as ei2, child_entry_id, parent_entry_id, field_id_46 as f46,field_id_47 as f47 
FROM 
exp_channel_data JOIN exp_playa_relationships ON entry_id=child_entry_id AND parent_field_id = 34) AS t2 
SET t1.field_id_60 = f46, t1.field_id_61 = f47 
WHERE t1.entry_id=parent_entry_id; 
0

Попробуйте этот запрос

UPDATE exp_channel_data a1 INNER JOIN exp_playa_relationships a ON a1.entry_id = a.child_entry_id 
INNER JOIN exp_channel_data b ON a.parent_entry_id = b.entri_id 
SET a1.field_id_60 = b.field_id_46, ta1.field_id_61 = b.field_id_47 
WHERE parent_field_id = '34' 
+0

@eggyal Вы можете сообщить мне, какой синтаксис? –

+0

Да, что действительно в sql-сервере, я обновил версию mysql, спасибо за это. –

+0

Спасибо за ваш ответ, rs, хотя также не обновил данные в exp_channel_data. – user1368392

0

Я думаю, что это то, что вы после:

UPDATE exp_playa_relationships AS t0 
    JOIN exp_channel_data  AS t1 
    ON t1.entry_id = t0.child_entry_id 
    JOIN exp_channel_data  AS t2 
    ON t2.entry_id = t0.parent_entry_id 
    SET t1.field_id_60 = t2.field_id_46 
    , t1.field_id_61 = t2.field_id_47 
+0

Хорошо, это exp_channel_data Я хочу ОБНОВИТЬ, а не exp_playa_relationships. Думаю, это сработает, но мне нужно будет поменять несколько бит? Спасибо за ваш ответ! – user1368392

+0

@ user1368392: вам не нужно ничего менять. Таблицы соединены так же, как с помощью оператора SELECT, а те, которые вы обновляете, отображаются под 'SET ...'. Тот факт, что он читает на английском языке, как будто вы обновляете 'exp_playa_relationships', несчастлив, но это не так. – eggyal

+0

Хорошо, я присмотрюсь более внимательно, поскольку выполнение инструкции в ее нынешнем виде не обновило данные. – user1368392

-1

Или в более классическом синтаксисе, вам нужно настроить на свой обув атрибуты & бар, но используйте что-то вроде следующего:

update exp_channel_data t1 
set (t1.field_id_60,t1.field_id_61) = (
    select t2.field_id_46 , t2.field_id_47 
    from exp_channel_data t2 
    where 1=1 
     and t2.entry_id = 'x' 
     and /* ENTER YOUR t1-t2 join condition here */ 
) 
where 1=1 
    and t1.entry_id = y 
; 

Но поскольку вы являетесь MySQL, я не верю, что это suppor ts сложный подзапрос. Таким образом:

update exp_channel_data t1 
set t1.field_id_60 = (
    select t2.field_id_46 
    from exp_channel_data t2 
    where 1=1 
     and t2.entry_id = 'x' 
     and /* ENTER YOUR t1-t2 join condition here */ 
) , t1.field_id_61 = (
    select t3.field_id_47 
    from exp_channel_data t3 
    where 1=1 
     and t3.entry_id = 'x' 
     and /* ENTER YOUR t1-t3 join condition here */ 
) 
where 1=1 
    and t1.entry_id = y 
; 
+0

Из [руководства MySQL] (http://dev.mysql.com/doc/en/update.html): «* В настоящее время вы не можете обновить таблицу и выбрать из той же таблицы в подзапросе. *« – eggyal

+0

Go MySQL !!! По-видимому, нам нужно создать прекрасные временные таблицы. Этот синтаксис не стоит :( – Xailor

+0

Не нужно. Для моего ответа можно использовать синтаксис с несколькими таблицами 'UPDATE'. – eggyal