Столбец ID с созданными уникальными значениями (с объединением всех) - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть вид на базу данных, созданную скриптом:

create or replace view auction_view4 as
    select row_number() over(order by f.userid) as id, 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 row_number() over(order by p.userid) as id, 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 row_number() over(order by h.userid) as id, 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 

Это результат моего взгляда

enter image description here

все есть хорошо, но я думаю, как создать идентификатор столбца с уникальными значениями? Есть ли у вас какие-либо советы, как достичь этой цели?

1 Ответ

1 голос
/ 22 апреля 2020

Вы можете попробовать что-то вроде этого

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) ...

Но хотя вы решили проблему уникальности идентификатора между двумя различные запросы, вы столкнулись бы с проблемами производительности, если бы вам пришлось использовать идентификатор в качестве поля поиска, фильтра или индекса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...