【问题标题】:SQL query to insert same value 1000 times without loopSQL查询在没有循环的情况下插入相同的值1000次
【发布时间】:2015-10-12 09:11:23
【问题描述】:

例如,如果我有字符串'sunday',那么我想只使用 SQL 在 1000 行中插入相同的值;不使用循环。

【问题讨论】:

  • 你需要使用sql循环
  • 你能用一个例子解释一下,这样你就可以理解你需要什么了吗?

标签: mysql sql sql-server


【解决方案1】:

如果你不想使用另一个表,你可以使用:

    INSERT INTO some_table (some_column) 
    SELECT 'Sunday'
    FROM (
        SELECT 1 
        FROM (SELECT 1 UNION SELECT 2) as d1
        JOIN (SELECT 1 UNION SELECT 2) as d2
        JOIN (SELECT 1 UNION SELECT 2) as d3
        JOIN (SELECT 1 UNION SELECT 2) as d4
        JOIN (SELECT 1 UNION SELECT 2) as d5
        JOIN (SELECT 1 UNION SELECT 2) as d6
        JOIN (SELECT 1 UNION SELECT 2) as d7
        JOIN (SELECT 1 UNION SELECT 2) as d8
        JOIN (SELECT 1 UNION SELECT 2) as d9
        JOIN (SELECT 1 UNION SELECT 2) as d10
    ) AS t
    LIMIT 1000

您可以根据需要调整 JOIN 的数量。

【讨论】:

  • 这行得通...但是为什么,为什么这比使用循环更可取?
  • 这可能比在循环中使用单行插入更快。除此之外,因为这是所要求的(仅限 SQL,没有循环)。
  • @Vatev 确实如此,但上下文/推理仍然很重要,否则您可能会为错误的问题提供正确答案。
  • @HmanshuUpadhyay 如果回答了您的问题,请接受答案。更多信息meta.stackexchange.com/questions/5234/…
【解决方案2】:

如果你已经有一个超过 1000 行的表,你可以这样做

insert into mytable (mycolumn) select "Sunday" from mytablewithmorethan1000 limit 1000

【讨论】:

    【解决方案3】:

    插入到 some_table (some_column) 选择“星期天” 从 ( 选择 1 FROM (SELECT 1 UNION SELECT 2) as d1 JOIN (SELECT 1 UNION SELECT 2) as d2 JOIN (SELECT 1 UNION SELECT 2) as d3 JOIN (SELECT 1 UNION SELECT 2) as d4 JOIN (SELECT 1 UNION SELECT 2) as d5 JOIN (SELECT 1 UNION SELECT 2) as d6 JOIN (SELECT 1 UNION SELECT 2) as d7 JOIN (SELECT 1 UNION SELECT 2) as d8 JOIN (SELECT 1 UNION SELECT 2) as d9 JOIN (SELECT 1 UNION SELECT 2) as d10 ) 作为吨 限制 1000

    【讨论】:

      【解决方案4】:
      INSERT INTO some_table (some_column) 
      SELECT 'Sunday' FROM ( SELECT 1 FROM (SELECT 1 UNION SELECT 2) as d1 
      
      JOIN (SELECT 1 UNION SELECT 2) as d2 JOIN (SELECT 1 UNION SELECT 2) as d3 
      JOIN (SELECT 1 UNION SELECT 2) as d4 JOIN (SELECT 1 UNION SELECT 2) as d5 
      
      JOIN (SELECT 1 UNION SELECT 2) as d6 JOIN (SELECT 1 UNION SELECT 2) as d7 
      JOIN (SELECT 1 UNION SELECT 2) as d8 JOIN (SELECT 1 UNION SELECT 2) as d9 
      JOIN (SELECT 1 UNION SELECT 2) as d10 ) AS t LIMIT 1000
      

      【讨论】:

        【解决方案5】:

        创建一个包含一些 N 行的表,然后将 sunday 值与 1000 行交叉连接。

        select A.day_name from number_table
        cross join (select 'sunday' as day_name) A
        where num <= 1000
        

        【讨论】:

        • 老兄,“创建一个包含 N 行的表”是他要求解决的问题。嗯,不完全是,但几乎没有改进。
        • Anon316,OP 只是要求避免循环,而不是临时表。 @HmanshuUpadhyay,什么错误?
        • @underscore_d - 首先,您的查询甚至没有尝试插入。而创建一个有n行的表是他想要解决的问题。您告诉他获得 1000 次插入而不使用循环的方法是首先将 1000 行插入到临时表中,而不使用循环。
        • 我的查询?那是什么查询?请告诉我,在这个线程中,我在哪里写了一个查询。祝你好运!
        【解决方案6】:

        用存储过程试试这样,

        create table thousandvalues (
        id int not null auto_increment primary key,
        weeks varchar(10)
        ); 
        
        delimiter //
        create procedure showthousand (in num int)
        begin
        declare i int default 0;
        while i < num do
        insert into thousandvalues (weeks) values ('sunday');
        set i = i + 1;
        end while;
        end //
        delimiter;
        
        call showthousand (1000);
        

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-02
          • 1970-01-01
          • 1970-01-01
          • 2015-11-19
          • 2014-08-25
          • 1970-01-01
          相关资源
          最近更新 更多