SQL表达式应该是等效的,但不是吗?
我们有一个问题,需要跨多个表连接数据,作为一组用户的过滤器。当只使用一个条件时,子查询给我的结果与只使用一个条件的简单查询相同,但当我使用多个子查询时,我得到的结果要高得多,好像它没有像我预期的那样向下过滤并执行and操作。我已经在一个简单的例子中验证了这两个子查询的结果和它们的简单等价物是相同的——因此我在检查这两个子查询中的用户id时出现了一些语法错误 将两个子查询像普通的AND过滤器一样一起使用,这样第二个示例就给出了我所期望的32个,我缺少的语法糖是什么?如果它是特定于软件的,我将在AWS雪花数据库上执行此查询 可以在单个表上执行正确的查询,如下所示: 例1:这给了我32:SQL表达式应该是等效的,但不是吗?,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,我们有一个问题,需要跨多个表连接数据,作为一组用户的过滤器。当只使用一个条件时,子查询给我的结果与只使用一个条件的简单查询相同,但当我使用多个子查询时,我得到的结果要高得多,好像它没有像我预期的那样向下过滤并执行and操作。我已经在一个简单的例子中验证了这两个子查询的结果和它们的简单等价物是相同的——因此我在检查这两个子查询中的用户id时出现了一些语法错误 将两个子查询像普通的AND过滤器一样一起使用,这样第二个示例就给出了我所期望的32个,我缺少的语法糖是什么?如果它是特定于软件的,我将在AW
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
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)
)
给我一个25的结果:
SELECT COUNT(DISTINCT table_a.user_id)
FROM table_a
WHERE cond_1
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
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)
)
给我一个48的结果:
SELECT COUNT(DISTINCT table_a.user_id)
FROM table_a
WHERE cond_2
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
以及:
第一个版本要求在表a的同一行中满足条件。第二个是要求用户id满足条件,但它们可以位于a中的不同行中。我看不出以下两者之间存在任何关系:
WHERE cond_1 AND cond_2
以及:
第一个版本要求在表a的同一行中满足条件。第二个是要求用户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
同一张表中较少的约束集给出25个这也没有意义
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
同一表格中较少的约束集为25