Sql 逻辑运算符不在括号外,返回令人困惑的结果

Sql 逻辑运算符不在括号外,返回令人困惑的结果,sql,hiveql,Sql,Hiveql,我有以下WHERE条款: 非除法='Freemium'和team=999,touch为空 我希望这与: 无WHERE条款 减去 division='Freemium'和team=999,touch为空 但事实并非如此。在查看计数时存在一些差异。有什么见解吗 仅供参考,我使用的是HiveQL,但不要指望MySQL/SQL会有什么不同 增加: 原始查询: CREATE TABLE AS example_so AS SELECT ticket_id, division, team, t

我有以下WHERE条款:

非除法='Freemium'和team=999,touch为空

我希望这与:

无WHERE条款

减去

division='Freemium'和team=999,touch为空

但事实并非如此。在查看计数时存在一些差异。有什么见解吗

仅供参考,我使用的是HiveQL,但不要指望MySQL/SQL会有什么不同

增加:

原始查询:

CREATE TABLE AS example_so AS
SELECT
  ticket_id,
  division,
  team,
  touch
FROM sample_table
WHERE
  day >= '2016-01-01' AND
  current_state <> 'deleted'
GROUP BY
  ticket_id,
  division,
  team,
  touch;
结果:81336

问题B:

SELECT
  COUNT(DISTINCT ticket_id)
FROM example_so
WHERE
  (team = 999 AND division = 'Freemium' AND touch IS NULL)
结果:355

查询C:

SELECT
  COUNT(DISTINCT ticket_id)
FROM example_so
WHERE
  NOT (team = 999 AND division = 'Freemium' AND touch IS NULL)

结果:80682要检查MySQL中的空值,需要使用IS null。 所以对于team为null的行,team不等于999,也不等于999,因为它为null。 为了更好地理解这一点,请尝试运行以下查询:

select a from (select null as a)a where  (a<>1)
应该是:

(division <> 'Freemium' or division is null 
or team <> 999 or team is null or touch IS NOT NULL)

减号是否可以删除重复项?就像工会一样。不,不应该是这样。那里不应该有任何重复项,我正在使用COUNT DISTINCT。COUNT DISTINCT显然会删除重复项。很难说,因为您只提供了查询的一小部分。问题可能与您正在计算的内容和使用distinct有关,但您没有向我们展示查询的这一部分。我现在添加了原始查询以获取更多上下文。请尝试此查询:选择distinct ticket\u id,team,division,touch FROM example\u so减去选择distinct ticket\u id,team,division,触摸示例_,其中team=999,division=Freemium,触摸为NULL减去选择不同的票证id,team,division,触摸示例_,因此,如果NOT team=999,division=Freemium,触摸为NULL,并尝试向我们提供结果,这将允许我们调试您的问题。
NOT (division = 'Freemium' AND team = 999 AND touch IS NULL)
(division <> 'Freemium' or division is null 
or team <> 999 or team is null or touch IS NOT NULL)