2017-10-31 11 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 문이 아닌 하나의 SQL 문에서이 작업을 수행하려고합니다.

+0

하위 쿼리의 세션 테이블 만 별명을 지정하고 session.id = t.id를 수행하십시오. – user2278120

+0

주사위가 없습니다. GOt "오류 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)