Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL表达式应该是等效的,但不是吗?_Sql_Snowflake Cloud Data Platform - Fatal编程技术网

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

SQL表达式应该是等效的,但不是吗?,sql,snowflake-cloud-data-platform,Sql,Snowflake Cloud Data Platform,我们有一个问题,需要跨多个表连接数据,作为一组用户的过滤器。当只使用一个条件时,子查询给我的结果与只使用一个条件的简单查询相同,但当我使用多个子查询时,我得到的结果要高得多,好像它没有像我预期的那样向下过滤并执行and操作。我已经在一个简单的例子中验证了这两个子查询的结果和它们的简单等价物是相同的——因此我在检查这两个子查询中的用户id时出现了一些语法错误 将两个子查询像普通的AND过滤器一样一起使用,这样第二个示例就给出了我所期望的32个,我缺少的语法糖是什么?如果它是特定于软件的,我将在AW

我们有一个问题,需要跨多个表连接数据,作为一组用户的过滤器。当只使用一个条件时,子查询给我的结果与只使用一个条件的简单查询相同,但当我使用多个子查询时,我得到的结果要高得多,好像它没有像我预期的那样向下过滤并执行and操作。我已经在一个简单的例子中验证了这两个子查询的结果和它们的简单等价物是相同的——因此我在检查这两个子查询中的用户id时出现了一些语法错误

将两个子查询像普通的AND过滤器一样一起使用,这样第二个示例就给出了我所期望的32个,我缺少的语法糖是什么?如果它是特定于软件的,我将在AWS雪花数据库上执行此查询

可以在单个表上执行正确的查询,如下所示:

例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
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