【问题标题】:Make an SQL query return duplicate rows without using the UNION ALL close使 SQL 查询返回重复行而不使用 UNION ALL 关闭
【发布时间】:2020-10-22 19:05:57
【问题描述】:

我有一个用例暗示即使多次指定相同的 id 也会返回所有记录

select d.id from data d where d.id in (1420552,  1420553)
union all
select d.id from data d where d.id in (1420552, 1420553)

由于“IN”谓词只是被翻译为所有指定值之间的“OR”,它不会给我想要的结果。

select d.id from data d where d.id in (1420552,  1420553, 1420552, 1420553)

因此,我想知道是否有任何替代方法可以获得所需的结果。 提前谢谢你。

【问题讨论】:

    标签: java sql db2 db2-luw


    【解决方案1】:

    非常奇怪的用例...

    但假设您的 Db2 平台和版本支持表值构造函数...

    试试

    with cte(id) 
      as (values (1420552),(1420553)
                ,(1420552),(1420553) )
    select d.id
      from data d
           join cte c on d.id = c.id;
    

    【讨论】:

    • 您好查尔斯,非常感谢您的回答。您建议的查询正在返回所需的结果。由于此查询使用公用表表达式 (cte),因此 hibernate V3.x 不支持此 SQL 功能。出于可移植性的原因,该项目使用 HQL,我将在下周一与首席开发人员交谈,询问他是否可以在此特殊用例的应用程序中引入本机查询。
    • @user3072470 你可以作为一个 nte 来做,我只是更喜欢 cte。不要忘记投票并标记为已接受。
    【解决方案2】:

    我可能会使用cross join:

    select d.id
    from data d cross join
         (select 1 from sysibm.sysdummy1 union all
          select 2 from sysibm.sysdummy1 union all
         ) n
    where d.id in (1420552,1420553);
    

    或者更简洁:

    select d.id
    from data d cross join
         (values (1), (2)) v(n)
    where d.id in (1420552,1420553);
    

    【讨论】:

    • 非常感谢您的回答。正如我在我的问题中提到的,相同的 ID 可以在查询中多次使用,例如,如果 1420552 在“IN”谓词中使用 5 次,则查询必须返回 5 次 ID = 1420552 的同一行,我希望我设法解释了要求。 select d.id from data d cross join (values (1), (2)) v(n) where d.id in (1420552,1420552,1420552,1420552,1420552,1420553,1420553,1420553);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多