Mysql inner join 문제 질문드립니다 5

by 짐승같은지능 [MySQL] MySQL문제 [2022.09.12 07:19:46]


점포별로 월급이 높은 사람들의 월급을 10퍼센트씩 삭감하는게 문제인데 

select b.address, a.name, Max(a.salary) 
from steplist a inner join tenpolist b
on a.tempo_no= b.temp_no
group by b.address

위에 구문을 서브 쿼리로 써서 문제를 풀려고 했는데

update steplist a inner join tenpolist b
on a.tempno_no =b.tempo_no
set a.salary = a.salary * 0.9
where ()

이렇게 해서 where 절안에 넣으면 될거라 생각했는데 전혀 안되네요  

 

 

 

 

by pajama [2022.09.12 22:14:30]

테이블 구조를 정확히 이해한건지 모르겠는데..

점포별 가장 월급이 높은 사람을 업데이트 하는 문장을 만들어봤습니다.

 

update stepList
set salary = salary * 0.9
where name in (select name 
                from (select b.address, a.name, Max(a.salary) 
                       from stepList a inner join tenpoList b
                       on a.tempo_no= b.tempo_no
                      group by b.address
                     ) nm
              ) 

by 짐승같은지능 [2022.09.14 08:56:06]

답변 매우 감사합니다! 헌데 제가 테이블구조를 안올렷엇네요;; 그래서 지금 해보니 안되는거같아서 다시 정리해서 올리겟습니다


by 마농 [2022.09.12 23:20:50]

-- 이 쿼리는 Group By 표준에 어긋나는 쿼리입니다.
select b.address, a.name, Max(a.salary)
  from stepList a
 inner join tenpoList b
    on a.tempo_no = b.tempo_no
 group by b.address
;
b.address 별 Max(a.salary) 는 구할 수 있지만.
원래는 a.name 은 함께 조회할 수 없습니다.
다만. MySQL 에서는 에러는 나지 않지만.
함께 조회하는 a.name 은 최대값에 해당하는 이름이 아닌 임의의 이름을 가져오게 됩니다.
또한 업데이트 대상은 a 테이블이고 b 는 굳이 조인할 필요도 없습니다.
 

UPDATE stepList a
  LEFT OUTER JOIN stepList b
    ON a.tempo_no = b.tempo_no
   AND a.salary < b.salary
   SET a.salary = a.salary * 0.9
 WHERE b.salary IS NULL
;

 


by 짐승같은지능 [2022.09.14 08:56:17]

감사합니다 저그런데 AND 구문은 왜 들어가는건가요 


by 마농 [2022.09.14 09:45:39]
UPDATE stepList a                 -- 기준(나)
  LEFT OUTER JOIN stepList b      -- 조인 대상(상대방)
    ON a.tempo_no = b.tempo_no    -- 점포가 같고
   AND a.salary < b.salary        -- 월급이 나보다 큰것을 조인하는데
   SET a.salary = a.salary * 0.9
 WHERE b.salary IS NULL           -- 조인된게 없다면? -> 내 월급이 제일 크다는 의미가 됨
;

 

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