具有多个带有 AND 类型逻辑连接的 where IN 子句的配置单元查询

Posted

技术标签:

【中文标题】具有多个带有 AND 类型逻辑连接的 where IN 子句的配置单元查询【英文标题】:hive query with multiple where IN clause with AND type logical connection 【发布时间】:2017-12-07 15:06:57 【问题描述】:

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

示例字段可能是:

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

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

我有一个带有多个 where IN 子句并结合 AND 逻辑运算符生成数据的配置单元查询。

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

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

在创建查询之前每次检查是否选择了一个值将涉及很多情况。

如果有人可以建议一个带有多个 where IN 的查询,并传递一些参数以获取未选择任何值的字段的所有行。

注意:我使用的是 hive JDBC 查询。

【问题讨论】:

就目前而言,这个问题太宽泛了..尝试显示一些示例数据和预期结果以及您的尝试。 【参考方案1】:

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

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

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

【讨论】:

感谢您的回答戈登。如果您不介意,请帮助我了解如何在 hive 中使用构造。可以举个例子。【参考方案2】:

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

【讨论】:

以上是关于具有多个带有 AND 类型逻辑连接的 where IN 子句的配置单元查询的主要内容,如果未能解决你的问题,请参考以下文章

Haskell:具有多个***绑定的“where”子句?

带有WHERE子句逻辑的SQL Server存储过程

左外连接导轨在 where 条件下具有急切加载

如何从 Firestore 7.24.0 实例中查询具有多个 where 子句的数据?

如何正确索引在具有多个连接的查询中使用的表

具有多个逻辑数据流的单套接字连接(区分数据包)