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');
我有一个简单的 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');