【问题标题】:Create a select query where if the id is not present then for that id it should return null in SQL创建一个选择查询,如果 id 不存在,那么对于该 id,它应该在 SQL 中返回 null
【发布时间】:2020-10-16 05:33:16
【问题描述】:

假设我的表 X 具有列 a、b 并具有如下数据

我需要查询的结果输出是select * from X where b in (111,777,888)

如何实现?

【问题讨论】:

    标签: java sql-server oracle


    【解决方案1】:

    一个想法是构建一个派生表来保存您搜索的值,然后将原始表与left join 一起使用。在 SQL Server 中,您将使用 values():

    select v.b, t.*
    from (values(111), (777), (888)) v(b)
    left join mytable t on t.b = v.b
    order by v.b
    

    我添加了一个包含最初搜索的值的列,因为它对我来说更有意义 - 如果需要,您可以将其删除。

    Oracle 不支持这种语法;一个(更长的)替代方案是union all 和from dual:

    select v.b, t.*
    from (
        select 111 b from dual
        union all select 777 from dual
        union all select 888 from dual
    ) v
    left join mytable t on t.b = v.b
    order by v.b
    

    【讨论】:

      【解决方案2】:

      对同一张表进行左连接。

      SELECT left_x.* 
         FROM x primary_x
         LEFT JOIN X left_x ON primary_x.a = left_x.a AND left_x.b IN ('111', '777', '888') 
      

      这里的关键是选择子句中的左连接表(以获取 NULL),并将 where 子句作为连接语句的一部分(以确保所有行仍然存在于主表上) .

      【讨论】:

        猜你喜欢
        • 2020-06-23
        • 2010-12-02
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 2013-04-10
        • 2021-11-30
        • 2021-02-25
        • 1970-01-01
        相关资源
        最近更新 更多