簡體   English   中英

Select 查詢與 Oracle SQL 中的子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM