다음과 같은 간단한 테이블 구조가 있습니다.
USER_ROLE +------------+----------------------+ | USER_ID | USER_ROLE | +------------+----------------------+ | U007 | A | | U007 | B | | U007 | C | | U008 | A | | U009 | A | | U009 | B | +------------+----------------------+
USER_ROLE을 'A'와 'B'대신 'Z'로 변경하고 싶지만 키는 구성되어 있습니다 (USER_ID 및 USER_ROLE).
1) 첫 번째 쿼리는 사용자가 컬렉션 ( 'A', 'B')에서 하나의 역할 만 갖는 경우 USER_ROLE을 'Z'로 설정합니다.
UPDATE ( SELECT USER_ID FROM USER_ROLE WHERE USER_ROLE IN ('A', 'B') GROUP BY USER_ID HAVING COUNT(*) = 1 ) SET USER_ROLE = 'Z';
하지만 작동하지 않습니다. 어떻게 생겼을까 요?
여기 있습니다 :
update user_role set user_role = 'Z'
where user_id in (
select user_id
from user_role
where user_role in ('A', 'B')
group by user_id
having count(*) = 1)
and user_role in ('A', 'B');
결과:
select * from user_role;
USER_ID USER_ROLE CREATED
------- --------- ----------
U007 A 2020-01-01
U007 B 2020-01-02
U007 C 2020-01-03
U009 A 2020-01-05
U009 B 2020-01-06
U008 Z 2020-01-04
H2 1.4.197에서 사용한 데이터 스크립트는 다음과 같습니다.
create table user_role (
user_id varchar(10),
user_role varchar(10),
created date,
primary key (user_id, user_role)
);
insert into user_role (user_id, user_role, created) values
('U007', 'A', '2020-01-01'),
('U007', 'B', '2020-01-02'),
('U007', 'C', '2020-01-03'),
('U008', 'A', '2020-01-04'),
('U009', 'A', '2020-01-05'),
('U009', 'B', '2020-01-06');
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다