[英]Select query with sub query in Oracle SQL
這是我試圖通過大量簡化來實現的一個例子。
我有一張這樣的桌子:
CREATE TABLE temp_pt
(
pt_key number PRIMARY KEY
, history VARCHAR(20)
, country VARCHAR(2)
, currency VARCHAR(3)
, settlementday VARCHAR(10)
);
這張表中有一些記錄,說如下:
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(1, 'MATCH', 'GB', 'GBP', '2020-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(2, 'MATCH', 'GB', 'GBP', '2021-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(3, 'MATCH', 'GB', 'EUR', '2020-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(4, 'MATCH', 'GB', 'EUR', '2021-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(5, 'MATCH', 'GI', 'GBP', '2020-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(6, 'MATCH', 'GI', 'GBP', '2021-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(7, 'MATCH', 'GI', 'EUR', '2020-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(8, 'MATCH', 'GI', 'EUR', '2021-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(9, 'MATCH', 'NL', 'GBP', '2020-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(10, 'MATCH', 'NL', 'GBP', '2021-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(11, 'MATCH', 'NL', 'EUR', '2020-12-01');
insert into temp_pt(PT_KEY, history, country, currency, settlementday) values(12, 'MATCH', 'NL', 'EUR', '2021-12-01');
我需要結算日 > 2020-12-31 的所有記錄,除了那些(貨幣是 GBP,國家是 GB 或 GI)。 我怎么寫這個?
需要 select 此表中貨幣為 GBP 的所有記錄,但如果國家/地區為 GB 或 GI,則不需要。
這似乎是一個簡單的where
子句:
select t.*
from temp_pt
where current = 'GBP' and country not in ('GB', 'GI')
我想我找到了答案,但它並不優雅:
SELECT * from temp_pt
where
TO_DATE(settlementday,'yyyy-MM-dd') > TO_DATE('2020-12-31','yyyy-MM-dd') AND pt_key NOT IN
(SELECT PT_KEY FROM TEMP_PT WHERE currency = 'GBP'
AND country IN ('GB', 'GI')
AND TO_DATE(settlementday,'yyyy-MM-dd') > TO_DATE('2020-12-31','yyyy-MM-dd'))
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.