sql - POSTGRES SQL Left Join 仅返回右表上最大的 UID?
问题描述
我试图左外连接两个表,我的左表包含 1 行,我的右表包含关联左行的 3 行。我只想使用右表中最大的 ID 数值返回 1 行。
我不应该使用左连接吗?
SELECT
(CASE WHEN p.invoice_number is null THEN 'Pending'
WHEN p.sold_date is not null THEN 'Sold'
ELSE 'Completed'
END),
p.invoice_number,
p.released_date
FROM
sales as s
left join inventory as i on (s.id = i.id)
left join plan as p on (i.id = p.id)
其中 table plan / p 包含一个 ID,它是库存的 FK,但还包含列 UID,它是一个指示修订的自动增量列。
从计划表中查找正确的值:
select * from plan order by plan.uid limit 1
这显然不会在查询中工作,因为它只返回连接的同一行。
解决方案
假设您的意思是“每个 ID 的最新 UID”,您可以连接到选择最大 UID 的派生表
SELECT CASE
WHEN p.invoice_number is null THEN 'Pending'
WHEN p.sold_date is not null THEN 'Sold'
ELSE 'Completed'
END,
p.invoice_number,
p.released_date,
p.uid as latest_uid
FROM
sales as s
left join inventory as i on s.id = i.id
left join (
select distinct on (id) id, uid
from plan
order by id, uid desc
) as p on i.id = p.id
推荐阅读
- r - 安装 R 包 'cubature':远程服务器中的编译器出错
- c - 如何防止 gcc 在无限循环后优化掉代码?
- python - 查看前一行值时用于循环优化(矢量化)的 Pandas
- python - 如何重新加载所有 cog 函数
- c# - 从数据库调用 XML 到字符串 - MVC
- r - 如何在 R 中创建交互式地图,您可以将鼠标悬停在上面并查看统计信息?
- javascript - 如何计算属于 Discord.js 机器人中某个角色的成员?
- postgresql - Postgres SQL 搜索第一个出现的字符串
- snowflake-cloud-data-platform - S3 into Snowflake:COPY INTO With purge = true 不会删除 S3 Bucket 中的文件
- ssl - Firebase 托管站点出现错误“未连接:潜在安全问题”