我想用另一個表中的隨機名更新表中的名稱。表Users中有真實的用戶名。在表tmp_users中有名字。我想用tmp_users表中的隨機名更新Users表中的所有名稱。這個想法是用假客戶匿名實際生產數據。在tmp_users表中有更少的條目,所以我不認爲我可以關聯一個id。用其他表中的隨機值替換值。 Oracle
我遇到的問題是所有用戶都設置爲相同的名稱。
一些樣本數據:
create table users
(
name varchar2(50)
);
create table tmp_users
(
name varchar2(50)
);
insert into users values ('Cora');
insert into users values ('Rayna');
insert into users values ('Heidi');
insert into users values ('Gilda');
insert into users values ('Dorothy');
insert into users values ('Elena');
insert into users values ('Providencia');
insert into users values ('Louetta');
insert into users values ('Portia');
insert into users values ('Rodrick');
insert into users values ('Rocco');
insert into users values ('Nelson');
insert into users values ('Derrick');
insert into users values ('Everett');
insert into users values ('Nisha');
insert into users values ('Amy');
insert into users values ('Hyun');
insert into users values ('Brendon');
insert into users values ('Gabriela');
insert into users values ('Melina');
insert into tmp_users values ('Snow White');
insert into tmp_users values ('Cinderella');
insert into tmp_users values ('Aurora');
insert into tmp_users values ('Ariel');
insert into tmp_users values ('Belle');
insert into tmp_users values ('Jasmine');
insert into tmp_users values ('Pocahontas');
insert into tmp_users values ('Mulan');
insert into tmp_users values ('Tinker Bell');
insert into tmp_users values ('Anna');
insert into tmp_users values ('Elsa');
--Wrong, sets all users to the same random name
update users set name = (select name from (select name from tmp_users order by sys_guid()) where rownum = 1);
--Wrong, sets all users to the same random name
update users set name = (select name from (select name from tmp_users order by dbms_random.value) where rownum = 1);
做這件事時:
select * from users;
結果我得到的是這樣的事情,這是我不想要的。
Cinderella
Cinderella
Cinderella
Cinderella
Cinderella
...
我想爲用戶表中的每一行分配一個隨機名稱。與所有行不同。我想這樣的東西:
Mulan
Cinderella
Belle
Elsa
Jasmine
Tinker Bell
...
任何想法如何做到這一點?我正在使用Oracle數據庫11g速成版11.2.0.2.0。使用遊標很容易,但我試圖弄清楚如何用set操作來完成它。
更新:
現在我已經測試了兩種不同的Oracle版本。相關的子查詢解決方案在Oracle數據庫11g速成版11.2.0.2.0上不起作用。 但它有時在Oracle數據庫11g企業版11.2.0.4.0上有效。在一張桌子上它一直工作,在另一張桌子上它永遠不會工作。
WHERE(users.name ='A' OR 1 = 1)? –
我不太關注關聯邏輯,但它給出了這個錯誤:「SQL錯誤:ORA-00904:」USERS「。」NAME「:無效標識符」 – johanrex
@ user1073476 - 不確定如何在Oracle中執行此操作。但想法是將子查詢與更新表 –