Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
POSTGRES SQL左连接是否只返回右表中最大的UID?_Sql_Postgresql - Fatal编程技术网

POSTGRES SQL左连接是否只返回右表中最大的UID?

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

我正在尝试将两个表左外连接,我的左表包含一行,我的右表包含关联的左行的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)
其中,表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
中没有匹配项,它将为您提供只有空值的行。