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

PostgreSQL中满足B列非0条件的左连接SQL查询需求

问题描述

现有两张表(表A、表B),需查询id与B列,采用LEFT JOIN关联。需求如下:

  • 仅当表B的B列存在至少一个非0值时,返回完整LEFT JOIN结果;
  • 若使用INNER JOIN会丢失B值为0的行,不符合需求。

测试案例

Case-1

表A

idA
101a1
102a2
103a3

表B

idB
1012
1020
1030

期望结果:(101,2),(102,0),(103,0)

Case-2

表A

idA
101a1
102a2
103a3

表B

idB
1010
1020
1030

期望结果:空集

PostgreSQL解决方案

可以通过EXISTS子查询判断表B是否存在非0值,再结合LEFT JOIN实现需求:

SELECT a.id, b.B
FROM table_a a
LEFT JOIN table_b b ON a.id = b.id
WHERE EXISTS (SELECT 1 FROM table_b WHERE B != 0);

逻辑说明

  1. EXISTS (SELECT 1 FROM table_b WHERE B != 0)会先检查表B中是否存在至少一个非0的B值;
  2. 如果存在该值,LEFT JOIN后的所有行都会被保留(包括B为0的行),匹配Case-1的需求;
  3. 如果不存在该值,WHERE条件不成立,结果集直接为空,匹配Case-2的需求。

内容的提问来源于stack exchange,提问作者VEMIREDDY CHANDRA TEJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:54:24