我试图基于同一张表中的另一行来修改一个列的值,所以我正在使用自我连接,正在获得期望的更改,但是它选择了两行(原始行和修改过的行),我没有要选择原始行,如果其任何列正在被修改,则仅应选择已修改的行(如果其值已被修改),否则应选择原始行。我创建了一个类似的架构来阐述这个问题:
create table tbl
(
id int not null,
status int not null,
name varchar null,
subject varchar null,
result varchar null
);
/* Create few records in this table */
INSERT INTO tbl VALUES(1, 1, 'A', 'sub1', 'Pending');
INSERT INTO tbl VALUES(2, 2, 'A', 'all', 'Passed');
INSERT INTO tbl VALUES(3, 1, 'B', 'sub1', 'Pending');
INSERT INTO tbl VALUES(4, 3, 'B', 'sub2', 'Failed');
COMMIT;
SELECT distinct t1.id, t1.status, t1.name, t1.subject,
CASE
WHEN t1.status = 1 and t2.subject = 'all' and t2.status = 2 THEN 'Passed'
WHEN t1.status = 1 THEN 'Pending'
WHEN t1.status = 2 THEN 'Passed'
WHEN t1.status = 3 THEN 'Failed'
END AS 'result'
FROM tbl t1 join tbl t2 on t1.name = t2.name
-----结果----------------------------
1|1|A|sub1|Pending
1|1|A|sub1|Passed
2|2|A|all|Passed
3|1|B|sub1|Pending
4|3|B|sub2|Failed
[这里,具有ID: 1
的行正在被复制,我不再希望第一行,因为我已基于原始表Result
的第二行将其Passed
列的值修改为subject: all (ID: 2)
。] >
------预期结果-----------------------
1|1|A|sub1|Passed
2|2|A|all|Passed
3|1|B|sub1|Pending
4|3|B|sub2|Failed
我试图基于同一张表中的另一行来修改一个列的值,所以我正在使用自我连接,正在获得期望的更改,但是它选择了两行(原始行和修改过的行),我...
最后一个案例确实覆盖了前一个案例。
我希望将其分解为不同的步骤。我将其转换为临时表,以便可以在环境中更轻松地运行它。