MYSQL에서 JOIN 후 update하기 0 2 1,864

by 농부지기 [2017.01.13 17:00:43]


아래 SQL문장이 2개 존재 하는데요.

2개 거의 동일합니다.

그런데, 첫번째 sql문장은 join시 sql문장을 한번더 감싸서 join했구요.
두번째 sql문장은 바로 join했구요.
그런데, 첫번째 sql문장은 오류가 발생하네요.
현재, 아래 처럼 sql문장이 간단하지 않구요.
한번더 감싼 이유는 나름대로 이유가 있어서 한번더 감싼겁니다.
이렇게 한번더 감싼, sql문장이 존재 할때 join 후 update를 어떻게 해야 될까요?

참고로, update시 많은 자료가 update됩니다.
시간도 조금 걸리구요.

아쉽게도 mysql 에서는 with(임시테이블)이 8.0 이상에서만 지원 되더군요.
현재 ver6.5를 사용하는데 임시테이블 가능한가요?

 

[오류발생]
UPDATE pp1 INNER JOIN (  select a.* 
                          from (SELECT rank, player_seq
                                  FROM pp1
                                 WHERE contest_yy    = '2016'
                                ) a
                     ) pp2
           ON ( pp1.player_seq = pp2.player_seq )
   SET pp1.rank = pp2.rank
 WHERE pp1.contest_yy    = '2016';

[오류 미발생]

UPDATE pp1 INNER JOIN (  SELECT rank, player_seq
                           FROM pp1
                          WHERE contest_yy    = '2016'
                      ) pp2
           ON ( pp1.player_seq = pp2.player_seq )
   SET pp1.rank = pp2.rank
 WHERE pp1.contest_yy    = '2016';

 

 

 

by 마농 [2017.01.13 17:14:10]

글쎄요?
복잡한 쿼리를 직접 봐야 알 수 있을 듯 하네요?
1. 정말 인라인 뷰가 불가피 한 것인지?
  - 다른 형태로 개선 가능할 듯
2. 인라인뷰 때문에 에러나는게 맞는지?
  - 인라인뷰 때문은 아닌 듯.


by 농부지기 [2017.01.13 17:42:36]

앗.. 제거 mysql Workbench를 사용하진 얼마 안되 몰랐던 문제였네요.

inline view를 이용할 경우 user 에 대한 이슈 였네요.

schemas에서 사용자 설정하니 정상적으로 되네요.

감사했습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입