[英]Update column based on IF Else Condition
我有兩個表A和B
表A
ID_number as PK
first_name,
L_Name
表B
ID_number,
Email_id,
Flag
我有幾個人具有多個電子郵件ID,並且已經在表B上標記為X。
而我正在嘗試查找具有電子郵件ID或多個電子郵件ID但從未被標記的人員列表。
例如, John clark
在表B中可能有2封電子郵件,但從未被標記。
簡單使用not exists
:
select a.*
from a
where not exists (select 1
from b
where b.id_number = a.id_number and b.flag = 'X'
);
您可能要執行更新,但是您的問題似乎僅與選擇有關(可能基於選擇進行更新)。 應該是這樣的:
SELECT A.L_Name
FROM A
WHERE NOT EXISTS (
SELECT 1
FROM B
WHERE B.ID_number = A.ID_number AND B.Flag = 'X'
)
OR
LEFT JOIN
版本
SELECT 1
FROM A
LEFT JOIN B ON B.ID_number = A.ID_number AND B.Flag = 'X'
WHER B.ID_number IS NULL
通常,第一個版本比第二個版本快。
忘記表A ...
SELECT DISTINCT ID_number FROM table_b t1
WHERE NOT EXISTS(
SELECT NULL FROM table_b t2 WHERE t1.ID_number=t2.ID_number AND t2.flag='X'
)
從您在評論中的回答來看,我認為這是您想要的:
--drop table update_test;
create table update_test
(
id_num number,
email_id number,
flag varchar2(1) default null
);
insert into update_test values (1, 1, null);
insert into update_test values (1, 2, null);
insert into update_test values (2, 3, null);
insert into update_test values (2, 7, null);
insert into update_test values (3, 2, null);
insert into update_test values (3, 3, 'X');
insert into update_test values (3, 7, null);
select * from update_test;
select id_num, min(email_id)
from update_test
group by id_num;
update update_test ut1
set flag = case
when email_id = (
select min(email_id)
from update_test ut2
where ut2.id_num = ut1.id_num
) then 'X'
else null end
where id_num not in (
select id_num
from update_test
where Flag is not null);
最后更新語句將更新,並設置Flag
為每個記錄字段id_num
與最低組email_id
。 如果id_num
組已經將Flag
字段設置為1,它將忽略它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.