Java 使SQL查询返回重复的行,而不使用UNION ALL close
我有一个用例,它意味着返回所有记录,即使多次指定了相同的idJava 使SQL查询返回重复的行,而不使用UNION ALL close,java,sql,db2,db2-luw,Java,Sql,Db2,Db2 Luw,我有一个用例,它意味着返回所有记录,即使多次指定了相同的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, 14205
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)
因此,我想知道是否有其他方法可以达到预期的效果。
先谢谢你
我可能会使用
交叉连接
:
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);
非常奇怪的用例
但假设您的Db2平台和版本支持表值构造函数
试一试
非常感谢你的回答。正如我在问题中提到的,同一Id可以在查询中多次使用,例如,如果在“in”谓词中使用1420552 5次,则查询必须返回5次Id=1420552的同一行,我希望我能够解释这些要求<代码>从数据d交叉连接(值(1)、(2))v(n)中选择d.id,其中d.id位于(142055214205521420552142055214205521420552142055214205521420553142055314205531420553)你好,查尔斯,非常感谢你的回答。您建议的查询正返回所需的结果。由于此查询使用公共表表达式(cte),hibernate V3.x不支持此SQL功能。出于可移植性的原因,项目使用HQL,我将在下周一与首席开发人员交谈,询问他是否可以在应用程序中为这个特殊用例引入本机查询。@user3072470您可以作为nte来做,我只喜欢cte。别忘了投票并标记为已接受。
with cte(id)
as (values (1420552),(1420553)
,(1420552),(1420553) )
select d.id
from data d
join cte c on d.id = c.id;