選擇我有PostgreSQL的數據庫中有兩個數據庫表:實際/歷史記錄表:通過版本號
create table actual (id int, name text, version int)
create table history (id int, name text, version int, actual_id int)
當記錄更改它被複制到歷史記錄表和實際版本的增量。行不能被刪除。
E.g.如果我們有3條記錄A1, B1, C1
(1是版本號)並更改B的名稱,那麼實際表將包含A1, B2, C1
和歷史記錄 - B1
。然後我們可以更改C的名稱,實際數據將爲A1, B2, C3
和歷史記錄 - B1, C1
如何按名稱和版本號選擇行?例如。 version = 2 and name like '%'
應該給我們A1, B2, C1
(A1和C1在版本2上仍然是實際的,它們與版本1相同)。
我想出了一個工會的選擇,例如:
select id, name, version from
(
select id, name, version, id as actual_id from actual
union select id, name, version, actual_id from history
) q
where version <= 2 and name like '%'
group by actual_id
order by version desc;
是否有可能做到這一點沒有工會(即Hibernate不支持的話)或者使用一些更好的方法?
感謝您指出數據庫供應商。這是PostgreSQL數據庫。添加到問題中。 – ike3