【问题标题】:How to filter hardcoded list via table in DB2?如何通过 DB2 中的表过滤硬编码列表?
【发布时间】:2018-12-26 13:52:31
【问题描述】:

我是 DB2 新手,现在面临一个问题。

我有一个硬编码的identityNo 列表和一个表,其中有一个名为identityNo 的列。我想找到identityNo,这样它们将在硬编码列表中,但不在表格的任何行中。

示例:

列表:1、2、3、4

select count(*) from myTable where identityNo = 1 => 3

select count(*) from myTable where identityNo = 2 => 0

select count(*) from myTable where identityNo = 3 => 1

select count(*) from myTable where identityNo = 4 => 0

预期结果: 2 和 4(任何可接受的格式)

【问题讨论】:

    标签: sql list db2 filtering


    【解决方案1】:

    在 DB2 中,您可以这样做:

    select i.id, count(t.identityNo)
    from (select 1 as id from sysibm.sysdummy1 union all
          select 2 from sysibm.sysdummy1 union all
          select 3 from sysibm.sysdummy1 union all
          select 4 from sysibm.sysdummy1 
         ) i left join
         mytable t
         on t.identityNo = i.id
    group by i.id
    order by i.id;
    

    【讨论】:

    • 谢谢,但这对于像我这样的长列表不实用。
    【解决方案2】:

    试试

    VALUES (1),(2),(3),(4) MINUS SELECT identityNo FROM myTable
    

    create table myTable(identityNo int);
    insert into myTable values (1),(3);
    VALUES (1),(2),(3),(4) MINUS SELECT identityNo FROM myTable;
    
    1          
    -----------
              4
              2
    
      2 record(s) selected.
    

    【讨论】:

    • 它说: SQL 错误 [42601]:[SQL0104] Token MINUS 无效。有效令牌:用于 SKIP WAIT WITH FETCH LIMIT ORDER UNION EXCEPT OFFSET。
    • 如果你不说你使用的是什么版本的 DB2,你可能会得到一个只适用于说 Db2 LUW 的答案。尝试使用关键字 EXCEPT 而不是 MINUS 它们是LUW 中也是一样,Db2 for i 可能只支持后者
    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多