2015-12-30 77 views
2

是否可以在具有除主鍵(ID)以外的相同數據的表中插入多個值?SQL在1個查詢中插入具有不同ID的相同值

例如:

INSERT INTO apples (name, color, quantity) 
VALUES of(txtName, txtColor, txtQuantity) 

是否可以插入50個紅蘋果用不同的ID?

ID(PK) |Name | Color | Quantity 
1  apple red  1 
2  apple red  1 

這樣可能嗎?

+0

是的。這是可能的 – rjv

+1

哪個RDBMS是這樣的?請添加一個標籤來指定您是使用'mysql','postgresql','sql-server','oracle'還是'db2' - 或者其他的東西。許多數據庫系統都有某種「身份」或自動遞增列類型 - 但這是**高度特定於供應商的** ** –

+0

如果將'ID'設置爲'indentity'(例如,用於sql服務器)。但是你應該告訴我們你的DBMS。 – HoneyBadger

回答

1

您可以使用INSERT ALL或像這樣使用UNION ALL。

INSERT ALL 
    INTO apples (name, color, quantity) VALUES ('apple', 'red', '1') 
    INTO apples (name, color, quantity) VALUES ('apple', 'red', '1') 
    INTO apples (name, color, quantity) VALUES ('apple', 'red', '1') 
SELECT 1 FROM DUAL; 

insert into apples (name, color, quantity) 
select 'apple', 'red', '1' from dual 
union all 
select 'apple', 'red', '1' from dual 

此前甲骨文12C你可以創建你的ID列順序。此外,如果你使用的是Oracle 12c的,那麼你可以讓你的ID列身份

CREATE TABLE apples(ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY); 

此外,如果順序並不重要,你只需要一個不同的/唯一的ID,那麼你可以使用

CREATE TABLE apples(ID RAW(16) DEFAULT SYS_GUID()) 
+1

非常感謝你這爲我工作! – Kristo

+0

@ Kristo1990: - 不客氣! –

+0

'INSERT ALL'和'UNION ALL'是無用的,因爲它可以在使用'CONNECT BY'子句的單個SQL語句中完成。 –

-1

創建與表4列

然後添加相同的行集具有不同的主鍵

INSERT INTO apples (ID,name, color, quantity) VALUES (UniqueID,txtName, txtColor, txtQuantity); 
+0

這將不會插入多行兄弟,我得到了相同的插入語句。如果txtQuantity是50,它將只插入一行,數量列的值爲50。我需要的是數量爲1的50行。 – Kristo

2

您可以使用SEQUENCE

 
`CREATE SEQUENCE seq_name 
    START WITH 1 
    INCREMENT BY 1` 

然後在你的INSERT語句,使用這個

 
`INSERT INTO apples (id, name, color, quantity) 
    VALUES(seq_name.nextval, 'apple', 'red', 1);`
0
CREATE TABLE APPLES(PK_ID NUMBER PRIMARY KEY,NAME VARCHAR2(100), COLOR VARCHAR2(100), QUANTITY VARCHAR(200)); 
INSERT INTO APPLES (PK_ID, NAME, COLOR, QUANTITY) VALUES(1, 'apple', 'red', 1); 
INSERT INTO APPLES (PK_ID, NAME, COLOR, QUANTITY) VALUES(2, 'apple', 'red', 1); 
+0

單獨一個代碼塊並不能提供很好的答案。請添加解釋(爲什麼它解決了問題,錯誤在哪裏等) –

0

你能做到這一點,使用CONNECT單SQL聲明條款,也被稱爲行生成方法

例如,爲了產生10行:

SQL> SELECT LEVEL ID, 
    2  'apple' NAME , 
    3  'red' color, 
    4  1  quantity 
    5 FROM dual 
    6 CONNECT BY LEVEL <=10; 

     ID NAME COLOR QUANTITY 
---------- ----- ------ ---------- 
     1 apple red    1 
     2 apple red    1 
     3 apple red    1 
     4 apple red    1 
     5 apple red    1 
     6 apple red    1 
     7 apple red    1 
     8 apple red    1 
     9 apple red    1 
     10 apple red    1 

10 rows selected. 

SQL> 

你可以使用上述SELECT作爲INSERT INTO SELECT聲明。

相關問題