2012-05-10 29 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