2012-05-10 15 views
0

私は2つのクエリを持っています。最初は、複数の行が返されます:選択からの値を使用して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を使用する必要があると思いますが、私の例では実装方法を理解できません。どんな助けでも大歓迎です。

答えて

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 Serverで有効です、私はそれに気づいてくれてありがとう、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ではなくUPDATEしたいです。これはうまくいくと思いますが、私は周りのビットを交換する必要がありますか?お返事をありがとうございます! – user1368392

+0

@ user1368392:あなたは何かを交換する必要はありません。テーブルは 'SELECT'ステートメントのように結合され、次に更新しているものは' SET ... 'の下に表示されます。 'exp_playa_relationships'を更新しているかのように英語で読むのは残念ですが、そうではありません。 – eggyal

+0

これは、ステートメントを実行してもデータが更新されていないため、より詳しく見ていきます。 – user1368392

-1

以上の古典的な構文では、あなた自身のfoo &バー属性に調整する必要があり、次のようなものを使用してください:

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とは思わない複合サブクエリです。そのように:

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

MySQL !!!どうやら、素敵な一時テーブルを作成する必要があります。その文法は価値がありません:( – Xailor

+0

不要です。私の回答ごとに複数テーブルの 'UPDATE'構文を使用することができます。 – eggyal

関連する問題