Oracle
在 OracleDB 中使用 SELECT DISTINCT 時如何生成和插入主鍵?
使用查詢時如何插入(或生成和插入)主鍵
SELECT DISTINCT
?如果我有一張這樣的桌子:
CREATE TABLE testUser( username VARCHAR2(50 CHAR), email VARCHAR2(50 CHAR) )
我有一些
customer_orders
包含這些數據的表格,我可以使用以下方法快速填充它:INSERT INTO testUser(username, email) SELECT DISTINCT user_name, user_email FROM customer_info;
但是,如果我有這張桌子:
CREATE TABLE users( id NUMBER, user_name VARCHAR2(50 CHAR), user_email VARCHAR2(50 CHAR) )
並嘗試使用相同的方法(
SELECT DISTINCT INSERT
方法)我會得到一個錯誤,如ORA-01400: cannot insert NULL into ("MYDB"."USERS"."ID")
.這是有道理的,因為主鍵為空,我如何自動生成主鍵在
1-n
哪裡?n``COUNT(SELECT DISTINCT user_name)
讓數據庫為您生成它(身份列,12c 功能):
CREATE TABLE users( id NUMBER generated always as identity, -- <= HERE user_name VARCHAR2(50 CHAR), user_email VARCHAR2(50 CHAR) );
如果您仍在使用 12c 以下的版本,那麼您可以簡單地使用
rownum
:INSERT INTO testUser(id, username, email) SELECT rownum, sq.* from (select DISTINCT user_name, user_email FROM customer_info) sq;
或者一個序列:
create sequence s1; INSERT INTO testUser(id, username, email) SELECT s1.nextval, sq.* from (select DISTINCT user_name, user_email FROM customer_info) sq;
或觸發器,如此處所述:https ://stackoverflow.com/questions/11296361/how-to-create-id-with-auto-increment-on-oracle