【发布时间】:2021-02-04 03:48:40
【问题描述】:
在 SQLYOG 中,以下代码运行良好,但我如何在 PostgreSQL 10.11 中使用此代码 我有大量数据要做同样的事情,这里是我的一些数据示例
我的表结构:-
CREATE TABLE shg_members (
`id` INTEGER,
`shg_id` INTEGER,
`member_name` VARCHAR(14),
`leadership_status` VARCHAR(9),
`other_education` VARCHAR(9)
);
INSERT INTO shg_members
(`id`, `shg_id`, `member_name`, `leadership_status`, `other_education`)
VALUES
('26', '18579', 'SARABJET KAUR', NULL, NULL),
('27', '18579', 'KULADIP KAUR', NULL, NULL),
('28', '18579', 'PARVINDER KAUR', 'President', NULL),
('29', '18579', 'KAMALJIT KAUR', NULL, NULL),
('30', '18579', 'JASPREET KAUR', NULL, NULL),
('31', '18579', 'LAJVANTI', 'President', NULL),
('32', '18579', 'RANJEET KAUR', 'President', NULL),
('33', '18579', 'GURPRIT KOUR', NULL, NULL),
('34', '18579', 'MANJEET KOUR', NULL, NULL),
('35', '18579', 'KULVINDER KAUR', NULL, NULL),
('36', '18579', 'KAMAL KAUR', NULL, NULL),
('37', '18579', 'SARJEET KAUR', NULL, NULL),
('38', '18580', 'KASHMIR KAUR', NULL, NULL),
('39', '18580', 'KIRANDEEP KOUR', 'President', NULL),
('40', '18580', 'SUKHDEEP KAUR', 'President', NULL),
('41', '18580', 'AMARJEET KAUR', 'President', NULL);
使用给定的查询
UPDATE shg_members s
INNER JOIN (
SELECT *, ROW_NUMBER() OVER (PARTITION BY shg_id ORDER BY id) rn
FROM shg_members
WHERE shg_id IN (18579, 18580)
) t ON t.id = s.id
SET s.leadership_status = CASE t.rn
WHEN 1 THEN 'President'
WHEN 2 THEN 'Secretary'
WHEN 3 THEN 'Treasurer'
ELSE 'Member'
END
结果
> id | shg_id | member_name | leadership_status | other_education
> -: | -----: | :------------- | :---------------- | :--------------
> 26 | 18579 | SARABJET KAUR | President | null
> 27 | 18579 | KULADIP KAUR | Secretary | null
> 28 | 18579 | PARVINDER KAUR | Treasurer | null
> 29 | 18579 | KAMALJIT KAUR | Member | null
> 30 | 18579 | JASPREET KAUR | Member | null
> 31 | 18579 | LAJVANTI | Member | null
> 32 | 18579 | RANJEET KAUR | Member | null
> 33 | 18579 | GURPRIT KOUR | Member | null
> 34 | 18579 | MANJEET KOUR | Member | null
> 35 | 18579 | KULVINDER KAUR | Member | null
> 36 | 18579 | KAMAL KAUR | Member | null
> 37 | 18579 | SARJEET KAUR | Member | null
> 38 | 18580 | KASHMIR KAUR | President | null
> 39 | 18580 | KIRANDEEP KOUR | Secretary | null
> 40 | 18580 | SUKHDEEP KAUR | Treasurer | null
> 41 | 18580 | AMARJEET KAUR | Member | null
但现在在 PostgreSQL 10.11 中我如何获得相同的输出
【问题讨论】:
标签: sql postgresql sql-update inner-join