PostgreSQL 14.2多币种表按updateTime关联查询及剩余数据需求
PostgreSQL 14.2 双表关联查询解决方案
背景说明
使用PostgreSQL 14.2,拥有结构一致的DOLLAR和EURO两张币种数据表,表结构如下:
CREATE TABLE IF NOT EXISTS DOLLAR ( id serial PRIMARY KEY, updateTime timestamp, -- 其他字段 ); CREATE TABLE IF NOT EXISTS EURO ( id serial PRIMARY KEY, updateTime timestamp, -- 其他字段 );
注:单表内updateTime字段值唯一。
需求1:查询并输出updateTime相同的EURO与DOLLAR记录(成对输出)
对应伪代码逻辑,直接用INNER JOIN关联两张表匹配updateTime字段即可:
SELECT e.*, d.* FROM EURO e INNER JOIN DOLLAR d ON e.updateTime = d.updateTime;
由于单表内updateTime唯一,每条EURO记录最多匹配一条DOLLAR记录,正好实现成对输出的效果。
需求2:输出EURO表中未在需求1中输出的所有行
提供两种可行实现方式:
方式1:LEFT JOIN + 空值筛选
SELECT e.* FROM EURO e LEFT JOIN DOLLAR d ON e.updateTime = d.updateTime WHERE d.id IS NULL;
方式2:NOT EXISTS子查询
SELECT e.* FROM EURO e WHERE NOT EXISTS ( SELECT 1 FROM DOLLAR d WHERE d.updateTime = e.updateTime );
两种方式都能精准筛选出EURO中没有对应DOLLAR同updateTime的记录。
内容的提问来源于stack exchange,提问作者linux_beginner
相关产品推荐
相关产品推荐

