You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 11g中如何筛选同时包含两个指定KEY值的账户?

正确查询方法解析

你的原查询逻辑存在问题:同一行数据中的key字段不可能同时等于两个不同的值,所以返回0条结果是符合逻辑的。你需要找的是同一个cta账户对应的多条记录中,同时包含1133-1-1和7095-1-1这两个key值,以下是几种适用于Oracle 11g的可行方案:

方案一:GROUP BY + HAVING 聚合查询

通过分组统计每个cta包含的目标key数量,筛选出同时拥有两个目标值的账户:

SELECT cta
FROM cargos
WHERE key IN ('1133-1-1', '7095-1-1')
GROUP BY cta
HAVING COUNT(DISTINCT key) = 2;
  • 使用DISTINCT是为了避免同一cta存在重复的相同key值时干扰统计结果,确保两个key都真实存在。

方案二:自连接查询

将表与自身连接,匹配同一cta下分别对应两个目标key的记录:

SELECT DISTINCT c1.cta
FROM cargos c1
JOIN cargos c2 ON c1.cta = c2.cta
WHERE c1.key = '1133-1-1'
  AND c2.key = '7095-1-1';
  • DISTINCT用于去除查询结果中重复的cta值。

方案三:EXISTS 子查询

通过两次子查询验证同一cta是否同时存在两个目标key的记录:

SELECT DISTINCT cta
FROM cargos c
WHERE EXISTS (
    SELECT 1 FROM cargos 
    WHERE cta = c.cta AND key = '1133-1-1'
)
AND EXISTS (
    SELECT 1 FROM cargos 
    WHERE cta = c.cta AND key = '7095-1-1'
);

这种方式逻辑直观,适合理解基础查询逻辑的场景。

内容的提问来源于stack exchange,提问作者mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 02:35:54