2012-05-10 26 views
0

我有兩個查詢。第一個將返回多行:使用來自select的值進行Mysql更新

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

......我想使用的值(parent_entry_id,child_entry_id)並將其納入該查詢,替換「X」和「Y」,也爲了每一行由第一個查詢返回。

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,但我無法弄清楚如何在我的示例中實現一個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我不相信它支持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