Oracle与PostgreSQL子查询有什么不同
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Oracle与PostgreSQL子查询有什么不同",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle与PostgreSQL子查询
千家信息网最后更新 2026年11月01日Oracle与PostgreSQL子查询有什么不同
本篇内容主要讲解"Oracle与PostgreSQL子查询有什么不同",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle与PostgreSQL子查询有什么不同"吧!
准确的表达应该是在子查询的having条件中出现agg函数且依赖父查询的相关字段时,Oracle支持而PG不支持。
Oracle
创建表,插入数据,执行查询,OK!
TEST-orcl@DESKTOP-V430TU3>drop table tbl1;Table dropped.TEST-orcl@DESKTOP-V430TU3>drop table tbl2;Table dropped.TEST-orcl@DESKTOP-V430TU3>drop table tbl3;Table dropped.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>create table tbl1 (id int,c1 int,c2 int,c3 int);Table created.TEST-orcl@DESKTOP-V430TU3>create table tbl2 (id int,c1 int,c2 int,c3 int);Table created.TEST-orcl@DESKTOP-V430TU3>create table tbl3 (id int,c1 int,c2 int,c3 int);Table created.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>insert into tbl1 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl1 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl1 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl1 values(2,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl1 values(2,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl1 values(3,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>insert into tbl2 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl2 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl2 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl2 values(2,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl2 values(2,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl2 values(3,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>truncate table tbl3;Table truncated.TEST-orcl@DESKTOP-V430TU3>insert into tbl3 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>insert into tbl3 values(1,1,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>commit;Commit complete.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>truncate table tbl3;Table truncated.TEST-orcl@DESKTOP-V430TU3>insert into tbl3 values(1,2,1,1);1 row created.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>select a.id,sum(a.c1) as sum_c1,sum(a.c2) as sum_c2 2 from tbl1 a,tbl2 b 3 where a.id = b.id 4 and exists (select 1 from tbl3 c where c.id = a.id group by c.id having sum(c.c1) > sum(a.c1)) 5 group by a.id; ID SUM_C1 SUM_C2---------- ---------- ---------- 1 9 9TEST-orcl@DESKTOP-V430TU3
不过,就算Oracle支持这样的写法,也不建议这样来写,原因是SQL语义理解起来并不友好,难以理解。
PG
创建表,插入数据,执行查询,出错。
[pg12@localhost ~]$ psqlExpanded display is used automatically.psql (12.1)Type "help" for help.[local:/data/run/pg12]:5120 pg12@testdb=# drop table tbl1;s(1,1,1,1);insert into tbl1 values(1,1,1,1);insert into tbl2 select * from tbl1;insert into tbl2 select * from tbl1;insert into tbl3 select * from tbl1;commit;ERROR: table "tbl1" does not exist[local:/data/run/pg12]:5120 pg12@testdb=# drop table tbl2;ERROR: table "tbl2" does not exist[local:/data/run/pg12]:5120 pg12@testdb=# drop table tbl3;ERROR: table "tbl3" does not exist[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# create table tbl1 (id int,c1 int,c2 int,c3 int);CREATE TABLE[local:/data/run/pg12]:5120 pg12@testdb=# create table tbl2 (id int,c1 int,c2 int,c3 int);CREATE TABLE[local:/data/run/pg12]:5120 pg12@testdb=# create table tbl3 (id int,c1 int,c2 int,c3 int);CREATE TABLE[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# insert into tbl1 values(1,1,1,1);INSERT 0 1[local:/data/run/pg12]:5120 pg12@testdb=# insert into tbl1 values(1,1,1,1);INSERT 0 1[local:/data/run/pg12]:5120 pg12@testdb=# insert into tbl1 values(1,1,1,1);INSERT 0 1[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# insert into tbl2 select * from tbl1;INSERT 0 3[local:/data/run/pg12]:5120 pg12@testdb=# insert into tbl2 select * from tbl1;INSERT 0 3[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# insert into tbl3 select * from tbl1;INSERT 0 3[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# commit;WARNING: there is no transaction in progressCOMMIT[local:/data/run/pg12]:5120 pg12@testdb=# select a.id,sum(a.c1) as sum_c1,sum(a.c2) as sum_c2pg12@testdb-# from tbl1 a,tbl2 bpg12@testdb-# where a.id = b.idpg12@testdb-# and exists (select 1 from tbl3 c where c.id = a.id group by c.id having sum(c.c1) = sum(a.c1))pg12@testdb-# group by a.id;ERROR: aggregate functions are not allowed in WHERELINE 4: ...ere c.id = a.id group by c.id having sum(c.c1) = sum(a.c1)) ^[local:/data/run/pg12]:5120 pg12@testdb=#
出现的错误是"aggregate functions are not allowed in WHERE",但条件明明在having怎么报WHERE中出现agg函数呢?原因是PG认为条件sum(c.c1) = sum(a.c1)中的a.c1出现在父查询中,该条件认为是WHERE中的条件。
到此,相信大家对"Oracle与PostgreSQL子查询有什么不同"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
查询
条件
不同
支持
内容
函数
原因
数据
学习
实用
更深
兴趣
写法
字段
实用性
实际
建议
操作简单
方法
是在
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡豆
亿人帮互联网科技有限公司
广东猪兼强互联网科技有限公司
广州紫鲸互联网科技有限公司
北京互联网科技公司
中国 科技 互联网
互联网 的科技创新
中国互联网科技发展
致骋互联网科技
云电互联网科技
深圳天众互联网科技公司
互联网科技论坛
美国互联网前沿科技
深圳国际航运科技和互联网
互联网对科技的发展
互联网科技公司有风险吗
东营紫格互联网科技
互联网科技企业商标注意事项
银川新华互联网科技学校原画
三亚科技创新互联网基地
互联网是第几次科技革命的成果
深圳九邦互联网科技有限公司
关于新基建和互联网科技
重庆互联网医院沙龙医盟信息科技
区块链结合互联网科技
科技互联网海报
2021互联网科技公司排名
小米互联网科技园入驻
山东大美朱楼互联网科技有限公司
前海云享互联网科技