【问题标题】:sqlite: How to return 0 when no row found within `in` operatorsqlite:在“in”运算符中找不到行时如何返回0
【发布时间】:2020-05-19 00:33:33
【问题描述】:

我之前问过同样的问题,使用psqlhow to return 0 instead of null with 'in' operator回答并解决了。 这是解决方案的想法,使用构建列表而不是in

select * from
(
    values (1), (2), (3)
) as required_ids ( text_id );

但是我不得不用sqlite3重写它,问题是sqlite3中没有values(...)的东西,所以我不能建立一个列表来代替in(...)。有谁知道这是怎么做到的吗?非常感谢!!

【问题讨论】:

    标签: sql sqlite count


    【解决方案1】:

    你可以使用select/union all:

    select *
    from (select 1 as text_id union all select 2 union all select 3) required_id
    

    【讨论】:

      【解决方案2】:

      sqlite3 中没有 values(...) 的东西

      当然,从 3.15 版开始:

      select * from (values (1), (2), (3));
      

      您可以将返回的列引用为column1
      结果:

      > | column1 |
      > | ------: |
      > |       1 |
      > |       2 |
      > |       3 |
      

      或在CTE 内:

      with cte(val) as (
        select * from (values (1), (2), (3))
      )
      select * from cte
      

      结果:

      > | val |
      > | --: |
      > |   1 |
      > |   2 |
      > |   3 |
      

      请参阅demo

      【讨论】:

      • 感谢您带来的知识。我的版本是 3.7.17,它在我无法升级的远程服务器上运行。所以..
      • SQLite 的最新版本是 3.31.1 所以即使是 3.15.0 (2016-10-14) 也被认为是旧的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多