配置单元where子句'和'/'或'操作顺序

fjaof16o  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(430)

我正在使用hadoop2.7.3。当您运行一个hiveql命令并且在其中有一个where子句,其中包含'and'和'or'时,它是如何分配条件的?
例如,假设我有以下查询:

... where A and B or C and D.

它是否返回以下内容之一:

A or B or C or D
((A and B) or C) and D
(A and B and D) or C
A and (B or C) and D

我知道我可以用括号来确切地说明上面使用的是哪一个,但是默认情况下它做什么呢?

91zkwejq

91zkwejq1#

@gordonlinoff的答案是正确的。您可以通过使用以下查询构造真值表来验证这一点:

SELECT *, A and B or C and D AS result
FROM
  (SELECT TRUE AS a
   UNION ALL SELECT FALSE AS a) A
CROSS JOIN
  (SELECT TRUE AS b
   UNION ALL SELECT FALSE AS b) B
CROSS JOIN
  (SELECT TRUE AS c
   UNION ALL SELECT FALSE AS c) C
CROSS JOIN
  (SELECT TRUE AS d
   UNION ALL SELECT FALSE AS d) D

哪些输出:

+-----+-----+-----+-----+-------+
|  a.a|  b.b|  c.c|  d.d| result|
+-----+-----+-----+-----+-------+
| true| true| true|false|   true|
| true| true| true| true|   true|
| true| true|false|false|   true|
| true| true|false| true|   true|
|false| true| true|false|  false|
|false| true| true| true|   true|
|false| true|false|false|  false|
|false| true|false| true|  false|
| true|false| true|false|  false|
| true|false| true| true|   true|
| true|false|false|false|  false|
| true|false|false| true|  false|
|false|false| true|false|  false|
|false|false| true| true|   true|
|false|false|false|false|  false|
|false|false|false| true|  false|
+-----+-----+-----+-----+-------+

因此,我们可以从经验上得出结论,这确实是 (A and B) or (C and D) .

guicsvcw

guicsvcw2#

这是操作的优先级。 AND 结合得比 OR ,所以:

A and B or C and D

解释为:

(A and B) or (C and D)

相关问题