【问题标题】:HQL JAVA - How to make combinaison condition with multiple listHQL JAVA - 如何使用多个列表制作组合条件
【发布时间】:2016-07-01 01:28:57
【问题描述】:

我在 HQL 中遇到了一个不寻常的问题,但我没有找到解决方案 ->

我有一个包含 A,B,C,D... 列的表,我想使用 B,C,D 的组合列表来请求。示例:

表格

 +----------+----------+----------+----------+<br/>
 |----PK----|-----B----|-----C----|-----D----|<br/>
 +----------+----------+----------+----------+<br/>
 |-----1-----|-----2-----|-----3----|-----4----|<br/>
 +----------+----------+----------+----------+<br/>
 |-----2-----|-----5-----|-----4----|-----7----|<br/>
 +----------+----------+----------+----------+<br/>
 |-----3-----|-----7-----|-----9----|-----8----|<br/>
 +----------+----------+----------+----------+<br/>
 |-----4-----|-----6-----|-----4----|-----9----|<br/>
 +----------+----------+----------+----------+<br/>
 |-----5-----|-----6-----|-----4----|-----7----|<br/>

我有一个 B、C、D 组合的列表,例如:comb1 : 5,4,7 |梳子2:6,4,9。 我想检索具有这些组合之一的所有行。 在此示例中,我想检索第 2 行和第 4 行。

我尝试了这个方法:创建 3 个列表 B_List、C_List、D_List 和这个请求:

选择 * FROM实体e WHERE e.B in(:B_List) AND e.c in(:C_List) AND e.d in(:D_List)

但此请求可能会检索到不需要的行,例如第 5 行。

我也试过了:

选择 * FROM实体e WHERE (e.b,e.c,e.d) in (:B_List,:C_List,:D_List)

但这种语法在 HQL 中似乎是错误的。 有人有想法吗?对不起我的英语>.>

【问题讨论】:

    标签: java mysql sql hibernate hql


    【解决方案1】:

    我不知道您是如何制作 :B_LIST :C_LIST 和 :D_LIST 的,但我可以建议您将它们制作为 :BCD_LIST (它们的串联),然后像这样进行比较:

    Select * FROM entity e 
    WHERE concat(e.B,',',e.c,',',e.d)  in(:BCD_List)
    

    【讨论】:

    • @Zakaria 只是列表项中的每一个都为“5,4,7”,用逗号分隔
    • 谢谢,这正是我想要的。我不知道我可以这样接近!
    • 没问题@Zakaria :)
    猜你喜欢
    • 2023-01-11
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2022-01-10
    • 2020-08-02
    相关资源
    最近更新 更多