Postgresql

如何連接兩個表 A 和 B 並獲得 B 的最新狀態?

  • August 18, 2022

我有兩張桌子:A 和 B

一個

我想要的結果

我嘗試過的事情之一是左連接

select * 
from "A" 
 left join "B" on "B"."provider_id" = "A"."provider_id" 
order by "A"."date" desc;

但我得到了基於重複的記錄status

很多可能的方法。

最好(最快)的解決方案在很大程度上取決於精確的表定義、典型查詢(你到底需要什麼?哪些列?所有或幾行?過濾方式?排序方式?…),數據庫資源,Postgres 版本,索引,最後但並非最不重要的一點是基數和數據分佈。

假設您想要所有行,來自具有所有列的大表,NOT NULL沒有使用 FK 約束強制執行引用完整性,在 中幾乎沒有重複B (provider_id),只有在 上的普通 B-tree 索引(provider_id),並且結果應按 排序provider_id,這將是我的查詢:

SELECT a.provider_id, b.status, a.date
FROM   a
LEFT   JOIN (
  SELECT DISTINCT ON (provider_id)
         provider_id, status
  FROM   b
  ORDER  BY provider_id, date DESC
  ) b USING (provider_id)
ORDER  BY provider_id;

看:

任何情況下都有效,但對於其他情況可能會有(很多)更快的查詢……

引用自:https://dba.stackexchange.com/questions/315777