【问题标题】:SQL insert same values with different IDs in 1 querySQL 在 1 个查询中插入具有不同 ID 的相同值
【发布时间】:2015-12-30 08:40:50
【问题描述】:

除了主键 (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

这样可以吗?

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加标签以指定您是使用mysqlpostgresqlsql-serveroracle 还是db2 - 或完全使用其他东西。许多数据库系统都有某种 identity 或自动增量列类型 - 但这是高度特定于供应商的
  • 如果您将ID 设置为indentity(例如对于sql server)。但是您应该告诉我们您的 DBMS。
  • hmm 我已将 ID 设置为 auto_increment 我只需要知道使用相同数据插入多行的方法是什么。我现在所拥有的是将数量列插入到我输入的任何数字中的 1 行。
  • 那你为什么把它标记为mysql?

标签: sql oracle sql-insert


【解决方案1】:

您可以使用SEQUENCE

`创建序列 seq_name 从 1 开始 增加 1`

然后在你的INSERT 语句中,使用这个

`INSERT INTO 苹果(ID、名称、颜色、数量) VALUES(seq_name.nextval, 'apple', 'red', 1 );`

【讨论】:

    【解决方案2】:

    您可以像这样使用 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
    

    在 Oracle 12c 之前,您可以在 ID 列上创建 SEQUENCE。此外,如果您使用的是 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() )
    

    【讨论】:

      【解决方案3】:

      您可以使用 CONNECT BY 子句在单个 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 语句。

      【讨论】:

        【解决方案4】:
        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 );
        

        【讨论】:

        • 单独的代码块并不能提供好的答案。请添加解释(为什么它解决了问题,错误在哪里等等......)
        【解决方案5】:

        创建包含 4 列的表格

        然后添加具有不同主键的相同行集

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

        【讨论】:

        • 这不会插入多行兄弟,我有相同的插入语句。如果 txtQuantity 为 50,它将只插入一行,其数量列的值为 50。我需要的是 50 行,数量为 1。
        猜你喜欢
        • 2017-04-23
        • 2017-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多