首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应该是等价的SQL表达式,但不是吗?

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

Stack Overflow用户
提问于 2020-03-17 20:24:46
回答 2查看 44关注 0票数 1

我们有一个问题,需要跨多个表连接数据,作为一组用户的筛选器。当只使用一个条件时,子查询给我的结果与只使用一个条件的“简单”查询相同,但是当我使用多个子查询时,我得到了更高的结果,比如它没有像我所期望的那样过滤和执行和操作。我在一个简单的查询中验证了两个子查询的结果和它们的“简单”等价是相同的,所以我在两个子查询中检查user_id的方式有一些语法错误。

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

“正确”查询可以在一个表上执行,如下所示:

例如。1:这给了我32:

代码语言:javascript
运行
复制
SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1 AND cond_2

例如。2:这给了我104:

代码语言:javascript
运行
复制
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)
)

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

给我的结果是25:

代码语言:javascript
运行
复制
SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1

给我的结果是25:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_2

给我的结果是48:

代码语言:javascript
运行
复制
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)
)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-17 20:41:57

我看不出以下几点之间的关系:

代码语言:javascript
运行
复制
WHERE  cond_1 AND cond_2

以及:

代码语言:javascript
运行
复制
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中可以位于不同的行中。

票数 4
EN

Stack Overflow用户

发布于 2020-03-17 21:51:57

这也没有道理

代码语言:javascript
运行
复制
SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1 AND cond_2

给你32

代码语言:javascript
运行
复制
SELECT COUNT(DISTINCT table_a.user_id)
FROM   table_a 
WHERE  cond_1

而从同一张表中比较少的对比则为25。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60729715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档