【问题标题】:SQL - IN clause with no matchSQL - IN 子句不匹配
【发布时间】:2019-10-18 01:49:03
【问题描述】:

我正在尝试构建一个查询,我可以从表中选择具有特定 ID 的所有产品,但我还想找出在 IN 子句中未找到哪些产品。

产品表

ID | Name
---|---------
1  | ProductA
2  | ProductB
4  | ProductD
5  | ProductE
6  | ProductF
7  | ProductG
select *
from products
where id in (2,3,7);

如您所见,表中不存在产品 id 3。 我的查询只会返回第 2 行和第 7 行。 如果 IN 子句中的值没有返回任何内容,我希望返回一个空白/空行。

期望的结果:

ID | Name
---|---------
2  | ProductB
3  | null
7  | ProductG

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    您可以使用left join

    select i.id, p.name
    from (select 2 as id union all select 3 union all select 7
         ) i left join
         products p
         on p.id = i.id
    

    【讨论】:

    • 这个答案也提供了预期的结果。谢谢。
    【解决方案2】:

    IN 在这种情况下没有用。
    将 CTE 与您要搜索的 id 一起使用并左连接到表:

    with cte(id) as (select * from (values (2),(3),(7)))
    select c.id, p.name 
    from cte c left join products p
    on p.id = c.id    
    

    请参阅demo
    结果:

    | id  | Name     |
    | --- | -------- |
    | 2   | ProductB |
    | 3   |          |
    | 7   | ProductG |
    

    【讨论】:

      猜你喜欢
      • 2017-05-28
      • 2020-06-15
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2017-06-21
      • 2014-09-17
      相关资源
      最近更新 更多