pgsql通过不同的查询条件依次显示不同的查询结果 OR EXISTS

项目上要求查询一个项目的待选值。

(******注意查询条件的顺序******最下方有pgsql的截图)

1.如果不是管理员,查询自己关联的项目。

2.如果是管理员,查询全部的

SELECT
    * 
FROM
    ITSM_PROVISIONPROJECTADMINISTRATION a
WHERE
    (a.itsm_id in (select itsm_provision_id from ITSM_USER_PROVISION where itsm_user_id ='c62a41862c7a47f195ecff02852ef2b3')) 
    OR EXISTS 
    (SELECT 1 FROM TS_FLOW_JS_BM A INNER JOIN TS_FLOW_JS B ON A.ts_js_id = B.ts_js_id WHERE B.TS_BM = 'PX202401100120' AND A.TS_USER_ID = 'c62a41862c7a47f195ecff02852ef2b3' )

注解:

 (a.itsm_id in (select itsm_provision_id from ITSM_USER_PROVISION where itsm_user_id ='c62a41862c7a47f195ecff02852ef2b3')) ——pgsql语句为查询一个关联条件的表,优先以这个为查询条件进行查询,其次查询EXISTS 子查询的条件

(SELECT 1 FROM TS_FLOW_JS_BM A INNER JOIN TS_FLOW_JS B ON A.ts_js_id = B.ts_js_id WHERE B.TS_BM = 'PX202401100120' AND A.TS_USER_ID = 'c62a41862c7a47f195ecff02852ef2b3' )——pgsql语句为查询管理员的查询条件,当前条件一满足之后,查询条件二是否满足,如果条件二满足,将忽略条件一的查询条件

可以理解为 OR EXISTS之前的查询条件仅在 OR EXISTS之后的查询条件不满足的时候执行

### 不同服务器间 PostgreSQL 数据库表的数据查询 为了实现跨不同服务器的 PostgreSQL 数据库表的数据查询,可以采用多种方法来完成这一目标。以下是几种常见的解决方案: #### 方法一:使用 dblink 扩展模块 dblink 是一个用于连接其他 PostgreSQL 服务器并执行 SQL 查询的功能强大的工具。通过安装和配置此扩展,可以从一台服务器上的数据库向另一台服务器发起请求。 ```sql -- 安装 dblink 扩展 CREATE EXTENSION IF NOT EXISTS dblink; -- 使用 dblink 进行远程查询 SELECT * FROM dblink( 'host=remote_host port=5432 dbname=db_name user=user password=password', 'SELECT id, name FROM remote_table' ) AS t(id int, name text); ``` 这种方法适用于需要临时或偶尔访问另一个服务器的情况[^1]。 #### 方法二:设置逻辑复制槽(Logical Replication Slot) 对于更频繁的数据同步需求,可以通过建立逻辑复制关系,在源端创建发布者角色,并在目标端订阅这些更改。这种方式不仅支持只读查询,还可以实现实时更新。 ```sql -- 创建发布方 Publication CREATE PUBLICATION mypub FOR TABLE public.mytable; -- 订阅方 Subscription 设置 CREATE SUBSCRIPTION mysub CONNECTION 'dbname=mydb host=replica_host' PUBLICATION mypub; ``` 这使得本地能够近实时获取远端的变化,从而简化了复杂查询的操作。 #### 方法三:利用外部数据封装器(Foreign Data Wrapper, FDW) FDW 提供了一种更为灵活的方式来集成异构系统的资源。特别是 `postgres_fdw` 可以让客户端像对待本地表一样处理来自其他 PostgreSQL 实例的数据。 ```sql -- 安装 postgres_fdw 扩展 CREATE EXTENSION IF NOT EXISTS postgres_fdw; -- 建立对外部服务器的映射 CREATE SERVER foreign_server FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'foreign_host', dbname 'foreign_db'); -- 导入远程模式定义 IMPORT FOREIGN SCHEMA myschema LIMIT TO (mytable) FROM SERVER foreign_server INTO local_schema; -- 正常查询即可获得结果集 SELECT * FROM local_schema.mytable WHERE condition; ``` 上述三种方式各有优劣,具体选择取决于实际应用场景的需求以及网络环境等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值