Oracle 11g r2 +如何生成其他字段的唯一ID?

时间:2017-10-23 10:43:36

标签: oracle oracle11g

Create table person (
  LastName varchar(255),
  FirstName varchar(255),
  seq_num int
)

Create table address (
  Address varchar(255),
  City varchar(255),
  seq_num int
)

我需要生成一个csv文件,其中一个字段叫做unique_id,结合了4个字段。

查看查询。

select
  GENERATE_ID(LastName, FirstName, Address, City) AS unique_id,
  LastName,
  FirstName,
  Address,
  City
from
  person,
  address
where
  person.seq_num = address.seq_num

如何制作GENERATE_ID或任何等效方法?

3 个答案:

答案 0 :(得分:0)

这个怎么样:

select
  ROW_NUMBER() OVER (PARTITION BY LastName, FirstName, Address, City ORDER BY LastName, FirstName) AS unique_id,
  LastName,
  FirstName,
  Address,
  City
from person 
   join address on person.seq_num = address.seq_num

但是请注意,如果您有多个具有相同名称和地址/城市的人,则该号码不再是唯一的。 否则,只需使用ROWNUM

答案 1 :(得分:0)

使用ORA_HASH怎么样?

select
  ora_hash(LastName || FirstName || Address || City) AS unique_id,
  LastName,
  FirstName,
  Address,
  City
from
  person,
  address
where
  person.seq_num = address.seq_num;

这样,ID对于后续导出保持不变。

答案 2 :(得分:0)

最终表格中有四列(结果),如果基于这四列的记录是唯一的,我认为生成密钥的简单方法就是将它们连接在一起。

select
LastName||FirstName||Address||City AS unique_id,
  LastName,
  FirstName,
  Address,
  City
from
  person,
  address
where
  person.seq_num = address.seq_num