【问题标题】:Select query with sub query in Oracle SQL在 Oracle SQL 中选择带有子查询的查询
【发布时间】:2021-03-26 08:07:30
【问题描述】:

这是我试图通过大量简化实现的一个示例。

我有一张这样的桌子:

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)除外。这个怎么写?

【问题讨论】:

    标签: sql oracle select subquery


    【解决方案1】:

    需要选择此表中货币为 GBP 的所有记录,但如果国家/地区为 GB 或 GI,则不需要。

    这似乎是一个简单的where 子句:

    select t.*
    from temp_pt
    where current = 'GBP' and country not in ('GB', 'GI')
    

    【讨论】:

    • 很抱歉我的问题不清楚。我需要结算日 > 2020-12-31 的所有记录,除了那些(货币是 GBP,国家是 GB 或 GI)。这个怎么写?
    【解决方案2】:

    我想我找到了答案,但它并不优雅:

    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'))
    ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      • 2020-02-17
      • 1970-01-01
      相关资源
      最近更新 更多