返回顶部
首页 > 资讯 > 数据库 >Oracle与PostgreSQL子查询有什么不同
  • 543
分享到

Oracle与PostgreSQL子查询有什么不同

2024-04-02 19:04:59 543人浏览 八月长安
摘要

本篇内容主要讲解“oracle与postgresql子查询有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle与Postgresql子查询有什么

本篇内容主要讲解“oraclepostgresql子查询有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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          9
TEST-orcl@DESKTOP-V430TU3

不过,就算Oracle支持这样的写法,也不建议这样来写,原因是SQL语义理解起来并不友好,难以理解。

PG
创建表,插入数据,执行查询,出错。

[pg12@localhost ~]$ psql
Expanded 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 progress
COMMIT
[local:/data/run/pg12]:5120 pg12@testdb=# select a.id,sum(a.c1) as sum_c1,sum(a.c2) as sum_c2
pg12@testdb-# from tbl1 a,tbl2 b
pg12@testdb-# where a.id = b.id
pg12@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 WHERE
LINE 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子查询有什么不同”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle与PostgreSQL子查询有什么不同

本文链接: https://lsjlt.com/news/63495.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle与PostgreSQL子查询有什么不同
    本篇内容主要讲解“Oracle与PostgreSQL子查询有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle与PostgreSQL子查询有什么...
    99+
    2024-04-02
  • Oracle与PostgreSQL拆分分区有什么不同
    本篇内容主要讲解“Oracle与PostgreSQL拆分分区有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle与PostgreSQL拆分分区有...
    99+
    2024-04-02
  • oracle递归查询和迭代查询有什么不同
    递归查询和迭代查询是两种不同的查询方式,它们的主要区别如下:1. 实现方式:递归查询是通过递归调用自身来进行查询操作,而迭代查询是通...
    99+
    2023-08-15
    oracle
  • Oracle与PostgreSQL内置的编程语言有什么不同
    本篇内容主要讲解“Oracle与PostgreSQL内置的编程语言有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle与PostgreSQL内置...
    99+
    2024-04-02
  • PostgreSQL 11与PostgreSQL 12的数字输出有什么不同
    本篇内容介绍了“PostgreSQL 11与PostgreSQL 12的数字输出有什么不同”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希...
    99+
    2024-04-02
  • PostgreSQL 12和PostgreSQL 11的tpcc有什么不同
    这篇文章主要讲解了“PostgreSQL 12和PostgreSQL 11的tpcc有什么不同”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreS...
    99+
    2024-04-02
  • mysql为什么不建议子查询
    mysql为什么不建议子查询?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql为什么不建议子查询1.使用子查询数据量大时...
    99+
    2024-04-02
  • oracle子查询怎么用
    子查询是嵌套在主查询中的独立查询,用于提供数据。oracle支持相关和非相关子查询,语法为:(子查询)。使用步骤包括:确定数据需求、编写子查询、嵌入主查询。优点包括:提高性能、简化查询、...
    99+
    2024-05-21
    oracle
  • 什么是子查询
    当一个查询结果是另一个查询的条件的时候,那么就称为子查询,子查询是在SQL语句内的另外一条SELECT语句。在SELECT、INSERT、UPDATE或DELETE命令中只要是表达式的地方都可以包含...
    99+
    2024-04-02
  • 怎么在oracle中查询操作子查询
    怎么在oracle中查询操作子查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、子查询语法SELECT select_l...
    99+
    2024-04-02
  • oracle子查询怎么关闭
    关闭子查询可以提高 oracle 复杂查询的性能:使用 join 将子查询重写为 join。在合适的情况下使用 exists 运算符。创建物化视图来存储子查询结果。使用 common t...
    99+
    2024-05-30
    oracle
  • redis与mongodb有什么不同
    今天就跟大家聊聊有关redis与mongodb有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MongoDB更类似MySQL,支持字段索引、...
    99+
    2024-04-02
  • html5与html有什么不同
    html5与html有什么不同?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。html有什么特点1、简易性:超级文本标记语言版本升级采用超集方式,从而更加灵活方便...
    99+
    2023-06-14
  • vue与bootstrap有什么不同
    这篇文章主要介绍“vue与bootstrap有什么不同”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue与bootstrap有什么不同”文章能帮助大家解决问题。在很多人眼里 bootstrap 和...
    99+
    2023-06-27
  • PostgreSQL中不同数据类型对查询性能的影响有哪些
    本篇内容主要讲解“PostgreSQL中不同数据类型对查询性能的影响有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL中不同数据类型对查询...
    99+
    2024-04-02
  • 数据库中关联子查询和非关联子查询有什么区别
    本篇内容主要讲解“数据库中关联子查询和非关联子查询有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库中关联子查询和非关联子查询有什么区别”吧!子查询...
    99+
    2024-04-02
  • oracle怎么查询两个表不同的数据
    在Oracle中,可以使用以下几种方式来查询两个表不同的数据:1. 使用MINUS运算符:```sqlSELECT colu...
    99+
    2023-08-31
    oracle
  • oracle怎么查询同义词
    在Oracle数据库中,可以使用以下两种方式查询同义词:1. 使用系统视图 ALL_SYNONYMS可以使用 ALL_SYNONYM...
    99+
    2023-08-25
    oracle
  • PostgreSQL查询优化中怎么上拉子链接
    本篇内容主要讲解“PostgreSQL查询优化中怎么上拉子链接”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL查询优化中怎么上拉子链接”吧!查...
    99+
    2024-04-02
  • oracle连接查询有什么用
    这篇文章主要介绍了oracle连接查询有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作