Вы можете попробовать что-то вроде этого
create or replace view auction_view4 as
with data as (
select f.id as propertyId,f.userid, r."type", a.street, a.homenumber, a.localnumber, a.city, a.postcode, f.price, f."size", f.rooms, f.floor
from address a, flat f, realassets r
where f.addressid = a.id and a.realassetid =r.id
union all
select p.id as propertyId, p.userid, r."type", a.street, a.homenumber, a.localnumber, a.city, a.postcode, p.price, p."size", null as rooms, null as floor
from address a, plot p, realassets r
where p.addressid = a.id and a.realassetid =r.id
union all
select h.id as propertyId, h.userid, r."type", a.street, a.homenumber, a.localnumber, a.city, a.postcode, h.price, h."size", h.rooms, null as floor
from address a, house h, realassets r
where h.addressid = a.id and a.realassetid =r.id )
select row_number() over(order by userid), * from data
Но у этого подхода есть и обратная сторона: одна и та же запись может иметь разные идентификаторы в двух последовательных запросах (потому что, например, вы добавили новый идентификатор пользователя в какую-то таблицу вовлечен).
Другой подход может быть сгенерирован ha sh из двух или более столбцов:
select ..., md5(f.userid || r.type) ...
Но хотя вы решили проблему уникальности идентификатора между двумя различные запросы, вы столкнулись бы с проблемами производительности, если бы вам пришлось использовать идентификатор в качестве поля поиска, фильтра или индекса