Sql 逻辑运算符不在括号外,返回令人困惑的结果
我有以下WHERE条款: 非除法='Freemium'和team=999,touch为空 我希望这与: 无WHERE条款 减去 division='Freemium'和team=999,touch为空 但事实并非如此。在查看计数时存在一些差异。有什么见解吗 仅供参考,我使用的是HiveQL,但不要指望MySQL/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
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)