Postgresql
如何連接兩個表 A 和 B 並獲得 B 的最新狀態?
我有兩張桌子: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;
看:
它在任何情況下都有效,但對於其他情況可能會有(很多)更快的查詢……