具有多个的hive查询,其中IN子句与AND类型逻辑连接

时间:2017-12-07 15:06:57

标签: sql hive hiveql rdbms

我在后端有一个带有hive db的Web应用程序,用户可以从中选择4种不同类型的值,并在UI上显示相关数据。

示例字段可能是:

  • 项目ID
  • 子组合
  • 项目状态
  • 项目财务状况

用户可以为上述字段(单个或多个)选择不同的值并请求数据。

我有一个单独的hive查询,其中有多个IN子句,并与AND逻辑运算符结合生成数据。

一切都很好,直到用户为每个字段选择至少一个值。但是,如果用户选择3个字段的过滤器并留空,则将''传递给IN子句,其中where条件并且不显示任何数据。因为没有一行符合条件。

如果没有选择某个字段,我必须在IN子句中传递一些东西来获取该字段的所有数据或删除该字段的IN子句。

如果在创建查询之前选择了某个值,则每次检查都会涉及很多情况。

如果有人可以建议使用多个IN的单个查询,并传递一些参数来获取没有选择值的字段的所有行。

注意:我正在使用配置单元JDBC查询。

2 个答案:

答案 0 :(得分:0)

您可以使用以下结构处理此问题:

where ($subporfolio is null or subportfolio = $subportfolio) and
      ($status is null or status = $status) and
      . . .

当然in null可能是= '',具体取决于您传递值的方式。

答案 1 :(得分:0)

我发现创建动态查询更好。 我循环访问所有输入参数并检查其值是否为空或仅为空,然后将其添加到查询中的where IN子句中。