SQL 应该等价的表达式,但不是?

SQL expressions that should be equivalent, but aren't?

我们遇到了一个问题,我们需要跨多个 table 加入数据作为一组用户的过滤器。当仅使用一个条件时,子查询给我的结果与仅使用一个条件的 "simple" 查询的结果相同,但是当我使用多个子查询时,我得到的结果更高,就像它没有过滤并执行 AND像我预期的那样操作。我在一个简单的娱乐中验证了两个子查询的结果和它们的 "simple" 等价物是相同的——所以我在检查两个子查询中的 user_id 时出现了一些语法错误子查询。

为了让第二个示例像我期望的那样将两个子查询一起使用,我缺少什么语法糖?如果它特定于软件,我将在 AWS Snowflake 数据库上执行此查询。

"correct" 查询可以在单个 table 上完成,如下所示:

例如。 1:这给了我 32:

SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1 AND cond_2

例如。 2:这给了我 104:

SELECT Count(DISTINCT table_b.user_id ) 
FROM   table_b 
WHERE ( 
    table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_1)
    AND 
    table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_2)
)

注意 对于上下文,我验证了子查询正在运行并提供与简单 WHERE 条件相同的数据:

给我的结果是 25:

SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1

给我的结果是 25:

SELECT Count(DISTINCT table_b.user_id )
FROM   table_b 
WHERE ( 
    table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_1)
)

给我的结果是 48:

SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_2

给我的结果是 48:

SELECT Count(DISTINCT table_b.user_id )
FROM   table_b 
WHERE ( 
    table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_2)
)

我认为两者之间没有关系:

WHERE  cond_1 AND cond_2

和:

WHERE (table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_1) AND 
      table_b.user_id IN (SELECT table_a.user_id FROM table_a WHERE cond_2)

第一个版本要求在 table_a 的同一行中满足条件。二是要求user_id满足条件,但在a.

中可以不同行

这也说不通

SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1 AND cond_2

给你 32

SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1

和来自相同 table 的较少约束集给出 25