我正在try 寻找以下两个查询的交集:

select distinct(id) from sval where val = 'True' and fid = 4044;

select distinct(id) from ival where fid = 3994 and val=0;

他们都返回了一份独一无二的id英尺S的名单.

我通过执行以下操作找到交叉点(即重叠值):

select distinct(id) 
from sval 
where (val = 'True' and fid = 4044) 
  and exists(
    select distinct(id) from ival 
    where fid = 3994 and val=0
  );

上述说法正确吗?

奇怪的是,如果我对第一个查询做count,对第二个查询做1,我得到的行数是25229022268.

当我计算第三行时,你会认为它最多返回22268,但我得到了252290,你知道为什么会是这样吗?

推荐答案

您的EXISTS将不起作用,因此需要一个相关子查询

以下是查询的两种可能性

select distinct(id) 
from sval 
where (val = 'True' and fid = 4044) 
  and id IN (
    select distinct(id) from ival 
    where fid = 3994 and val=0
  );

select distinct(id) 
from sval 
where (val = 'True' and fid = 4044) 
  and exists(
    select 1 from ival 
    where fid = 3994 and val=0 AND id = sval.id
  );

Sql相关问答推荐

错误ORA-00908:通过全能自动化,缺少PLSQL编译器的关键字

判断时间之间是否有时间

PostgreSQL:获取每家店铺收入最高的员工

将SEMI JOIN、ANTI JOIN转换为非连接SQL

SQL查询:合并2个表

从列中提取子字符串的ORDER BY CASE语句

使用多个嵌套数组查询JSON数据

HAVING子句内部过滤的正确方法

无法将发票与产品价格相关联

缺少日期标识

违反了完整性约束-值存在时找不到父键

POSTGRES to_timestamp() 假定 UTC 字符串为本地时间

SQL SUM Filter逻辑解释

根据不同日期标准分配组的逻辑

SQL的左连接在多对多关系情况下使用

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

强制 SQL 始终通过 R 从视图中返回至少一行

使用 PL/PGSQL 函数 Select 返回多条记录

T-SQL - 返回每条记录的最近雇佣日期

如何在 Oracle 中获取此变量的值?