我们有一个问题,需要跨多个表连接数据,作为一组用户的筛选器。当只使用一个条件时,子查询给我的结果与只使用一个条件的“简单”查询相同,但是当我使用多个子查询时,我得到了更高的结果,比如它没有像我所期望的那样过滤和执行和操作。我在一个简单的查询中验证了两个子查询的结果和它们的“简单”等价是相同的,所以我在两个子查询中检查user_id的方式有一些语法错误。
我缺少的语法糖是什么,可以像普通和过滤器一样使用这两个子查询,这样第二个例子就像我所期望的那样给了我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)
)注意:对于上下文,我验证了子查询的功能,并提供了与简单的条件相同的数据:
给我的结果是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)
)发布于 2020-03-17 20:41:57
我看不出以下几点之间的关系:
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中可以位于不同的行中。
发布于 2020-03-17 21:51:57
这也没有道理
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。
https://stackoverflow.com/questions/60729715
复制相似问题