POSTGRES SQL左连接是否只返回右表中最大的UID?
我正在尝试将两个表左外连接,我的左表包含一行,我的右表包含关联的左行的3行。我只想使用右表中的最大ID数值返回1行 我不应该使用左连接吗POSTGRES SQL左连接是否只返回右表中最大的UID?,sql,postgresql,Sql,Postgresql,我正在尝试将两个表左外连接,我的左表包含一行,我的右表包含关联的左行的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 FRO
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)
其中,表plan/p包含一个标识,该标识是库存的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
您的问题提到两个表,但您的查询有三个表。我很困惑。你确定这是你真正的疑问吗?如果
s.id=i.id
和i.id=p.id
,您也可以直接加入s
和p
。如果您没有从s
中选择任何列,为什么要选择左连接?如果在p
中没有匹配项,它将为您提供只有空值的行。