【问题标题】:Inserting random names PL/SQL插入随机名称 PL/SQL
【发布时间】:2017-03-04 21:54:57
【问题描述】:

如何将随机名称插入另一个表? 例如:

select firstname,lastname from table1;
create table2 (newfirstname varchar2(20),newlastname varchar2(20));
insert into table2 select newfirstname, random(newlastname);

如何使用 table1 的信息生成新用户?
所以,我的问题是,如何将 table1 中的随机“姓氏”插入 table2 从 table2 获取一个新的全名(newfirstname+newlastname) (名字+姓氏)来自 table1。 我正在使用 sql developer ,pl/sql 。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:
    insert into table2
    select A.firstname, B.lastname
      from table1 A, table1 B
     where not exists(select 1 from table1 C
                       where C.firstname=A.firstname and C.lastname=B.lastname)
    

    如果需要,添加随机排序和/或计数限制。

    【讨论】:

      【解决方案2】:

      我相信你应该在table2中有数字ID字段,比如table2.id,然后

      select  
      (select MIN(table2.id) from table2) as minid, (select MAX(table2.id) from table2) as maxid, 
      (select table2.firstname from table2 where table2.id >= dbms_random.value(minid,maxid) order by table2.id limit 1) as rnd_firstname, 
      (select table2.lastname from table2 where table2.id >= dbms_random.value(minid,maxid) order by table2.id limit 1) as rnd_lastname;
      

      将为您提供 table2 中名字 + 姓氏的随机组合。

      【讨论】:

      • 我明白了,但我必须从 table1 中随机选择姓氏并将它们插入 table2。因此,table2 中的名称将与 table1 不同。
      【解决方案3】:
        SELECT
          aa.nome,
          aa.sobrenome,
          bb.nome,
          bb.sobrenome,
          CASE 
              WHEN DBMS_RANDOM.VALUE(1,50) > 20 THEN aa.nome || bb.sobrenome
              ELSE
               bb.nome || aa.sobrenome
          END AS new_name
        FROM
          (
            SELECT
                SubStr(b.nome,1,InStr(b.nome,' ')) nome,  
                SubStr(b.nome,InStr(b.nome,' '))  sobrenome,
                sexo
            FROM 
                cadastro b
            WHERE
                empresa_id=4 
            ORDER BY 
                DBMS_RANDOM.VALUE(1,800000)
          ) aa,
          (
            SELECT 
                SubStr(b.nome,1,InStr(b.nome,' ')) nome,  
                SubStr(b.nome,InStr(b.nome,' '))  sobrenome,
                sexo
            FROM 
                cadastro b
            WHERE
                empresa_id=4               
            ORDER BY
              DBMS_RANDOM.VALUE(1,800000 )
          ) bb
        WHERE  
            aa.sexo=bb.sexo
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-11
        • 2015-11-04
        • 2018-09-26
        • 1970-01-01
        • 1970-01-01
        • 2016-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多