2017-10-31 12 views
0

私はMySQL 5.5.37を使用しています。私はテーブルを更新したいと私は私が更新値を取得するために使用するクエリの節で更新したい特定の行の値を使用したいと思います。だから、例えば、私はそう更新ステートメントの "セット"部分で更新されるテーブルをどのように参照しますか?

update session ts set 

ように私のテーブルのエイリアスを作成し、私はそれが可能だ場合、文の一部を「設定」で「ts.id」を参照したいと思います。私は

update session ts set user_id = (select q.* from 
    (select u.id FROM session t, training_session_org tso, organization o, user u 
    where o.user_id = u.id and tso.organization_id = o.id 
    and t.id = tso.training_session_id and t.id = ts.id) q); 

を試してみました。しかし、私は

ERROR 1054 (42S22): Unknown column 'ts.id' in 'where clause' 

その可能な場合は、クエリで私の更新されたテーブルを参照するための適切な方法は何を取得していますか?また、私はこれを複数のSQL文ではなく1つのSQL文で実行したいと考えています。

+0

サブクエリ内のセッションテーブルのエイリアスのみを行い、session.id = t.idを実行します。 – user2278120

+0

ダイスはありません。 GOt "ERROR 1054(42S22): 'where句'の" session.id "列が不明です。 – Dave

答えて

0

私はあなたがエラーを回避するためにそれを使用しようとしたと思われる、問題はあなたが二重のサブクエリを使用していることで、ts.idは、内側のクエリスコープの外に行く:

You can't specify target table 'ts' for update in FROM clause

が、溶液は単に省略されていますサブクエリからsessionの表は、あなたがそれを必要としないよう:

:あなたはさらに、クエリを簡素化することができます参加するに基づいて実際に

update session set user_id = (select u.id 
    from training_session_org tso 
    join organization o on o.id = tso.organization_id 
    join user u on u.id = o.user_id 
    where tso.training_session_id=session.id) 

update session set user_id = (select o.user_id 
    from training_session_org tso 
    join organization o on o.id = tso.organization_id 
    where tso.training_session_id=session.id) 
関連する問題