SQL 使用子查询 H2 更新

SQL update using subqueries H2

我有一个简单的 table 结构如下:

USER_ROLE +------------+----------------------+ | USER_ID | USER_ROLE | +------------+----------------------+ | U007 | A | | U007 | B | | U007 | C | | U008 | A | | U009 | A | | U009 | B | +------------+----------------------+

我想将 USER_ROLE 更改为 'Z' 而不是 'A' 和 'B' 但是密钥由(USER_ID 和 USER_ROLE).

1) 第一个查询设置为 USER_ROLE 到 'Z',其中用户只有一个角色来自集合('A'、'B')。

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');