在pgsql中通过使用JOIN或EXISTS来解决主表与副表只在副表中使用条件查询,返回主表数据

news/2024/12/13 17:21:27/

比如,在pgsql中,我有两张表,一张是sanitation_maintenance_contract,另一张是sanitation_maintenance_contract_cycle,我需要在sanitation_maintenance_contract中写sql语句,但是在where中有个条件是根据sanitation_maintenance_contract_cycle中的start_date和end_date做条件。我只要sanitation_maintenance_contract_cycle中的条件判断而已 而不需要他的数据,sanitation_maintenance_contract的id和sanitation_maintenance_contract_cycle的contract_id是关联的。

主表sanitation_maintenance_contract

在这里插入图片描述

副表sanitation_maintenance_contract_cycle

在这里插入图片描述

解决方案

可以使用JOIN或EXISTS来解决,但是如何避免返回多条记录?

方案一:使用 DISTINCT(去重)

SELECT DISTINCT smc.*
FROM sanitation_maintenance_contract smc
JOIN sanitation_maintenance_contract_cycle smccON smc.id = smcc.contract_id
WHERE smcc.start_date <= '2024-12-01'AND smcc.end_date >= '2024-01-01';

在这里插入图片描述

  • DISTINCT 可以帮助去除重复的 sanitation_maintenance_contract
    记录。虽然它会增加查询的开销,但能有效地避免重复返回合同记录。

方案二:使用 EXISTS 来避免重复

只关心 sanitation_maintenance_contract 表的数据,并且想避免因为sanitation_maintenance_contract_cycle 表有多条记录而重复返回同一条合同记录,EXISTS可能是最合适的解决方案。

SELECT smc.*
FROM sanitation_maintenance_contract smc
WHERE EXISTS (SELECT 1FROM sanitation_maintenance_contract_cycle smccWHERE smcc.contract_id = smc.idAND smcc.start_date <= '2024-12-01'AND smcc.end_date >= '2024-01-01'LIMIT 1
);

在这里插入图片描述

  • 在这个查询中,EXISTS 子查询会检查是否存在符合条件的sanitation_maintenance_contract_cycle记录,但只要找到了符合条件的一条记录,它就会返回 sanitation_maintenance_contract 表的对应记录。
  • LIMIT 1 是多余的,因为 EXISTS 本身就是基于是否存在至少一条匹配记录来决定是否返回父查询的记录,但加上 LIMIT 1可以确保子查询只返回一条记录,提高效率。

http://www.ppmy.cn/news/1554810.html

相关文章

智能雨量水位数据采集终端机 RTU:自动化水文监测的关键

在当今数字化时代&#xff0c;自动化水文监测对于水资源管理、防洪减灾以及生态环境保护等方面起着至关重要的作用。而智能雨量水位数据采集终端机 RTU 正成为实现自动化水文监测的关键设备。 一、智能雨量水位数据采集终端机 RTU设备组成 传感器模块 雨量传感器&#xff1a;用…

Linux pstree 命令详解

简介 pstree 命令用于以分层&#xff08;树状&#xff09;格式显示正在运行的进程。它显示进程之间的关系&#xff0c;例如哪些进程是由其他进程生成的。 安装 # 基于 Debian/Ubuntu 的系统 sudo apt install psmisc# 基于 CentOS/RHEL/Fedora 的系统 sudo yum install psmi…

企业级包管理器之 npm 回顾 (2)

在前端开发的浩瀚海洋中&#xff0c;npm&#xff08;Node Package Manager&#xff09;犹如一座坚实的灯塔&#xff0c;为开发者们指引着前进的方向。现在&#xff0c;让我们一同回顾 npm 的基本概念以及包的相关重要概念&#xff0c;为深入理解企业级包管理器奠定基础。 一、…

Devops-蓝鲸篇-02-蓝盾简介

BK-CI 简介 蓝鲸持续集成平台&#xff08;代号 BK-CI&#xff09;是一个免费并开源的 CI 服务&#xff0c;可助你自动化构建-测试-发布工作流&#xff0c;持续、快速、高质量地交付你的产品。 使用 BK-CI 屏蔽掉所有研发流程中的繁琐环节&#xff0c;让你聚焦于编码。它通常被…

2024年12月12日Github流行趋势

项目名称&#xff1a;nexus-xyz / nexus-zkvm 项目维护者&#xff1a;govereau slumber danielmarinq sjudson yoichi-nexus项目介绍&#xff1a;Nexus zkVM 是一个零知识虚拟机&#xff0c;它允许开发人员编写和执行代码&#xff0c;同时保持输入数据的隐私。项目star数&#…

JAVA实战:借助阿里云实现短信发送功能

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…

Win10环境vscode+latex+中文快速配置

安装vscodelatex workshop 配置&#xff1a; {"liveServer.settings.donotVerifyTags": true,"liveServer.settings.donotShowInfoMsg": true,"explorer.confirmDelete": false,"files.autoSave": "afterDelay","exp…

大数据新视界 -- 大数据大厂之 Hive 临时表与视图:灵活数据处理的技巧(上)(29 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…