점포별로 월급이 높은 사람들의 월급을 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 절안에 넣으면 될거라 생각했는데 전혀 안되네요
테이블 구조를 정확히 이해한건지 모르겠는데..
점포별 가장 월급이 높은 사람을 업데이트 하는 문장을 만들어봤습니다.
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
)
답변 매우 감사합니다! 헌데 제가 테이블구조를 안올렷엇네요;; 그래서 지금 해보니 안되는거같아서 다시 정리해서 올리겟습니다
-- 이 쿼리는 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
;
감사합니다 저그런데 AND 구문은 왜 들어가는건가요
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 -- 조인된게 없다면? -> 내 월급이 제일 크다는 의미가 됨
;