2015-12-30 56 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声明。

相关问题