2014-05-22 61 views
0

我有一个整数列表,我想要一个INSERT,将它们作为一个特定的列添加。这个想法是我可以避免使用多个INSERT,或者我可以避免使用SQL FOR LOOP。MySQL插入硬编码值的数组

这里是我的尝试:

INSERT INTO my_table 
(id, number, text) 
SELECT array_id, 5, 'Text' 
WHERE array_id = (SELECT 9,14,19,39,58,15,1,59,40,20,17,69,12,42,22,2,57,1,8,4) 

OR

WHERE array_id IN (9,14,19,39,58,15,1,59,40,20,17,69,12,42,22,2,57,1,8,4) 

和其他各种东西,

是否有一个快速的方法来做到这一点?同样的问题的

B部分是添加列表的组合,就像这样:

INSERT INTO my_table 
    (id, number, text) 
    SELECT array_id, array_number, array_text 
    WHERE array_id = (SELECT 9,14,19,39,58,15,1,59,40,20,17,69,12,42,22,2,57,1,8,4) 
    AND array_number = (SELECT 1,2,3) 
    AND array_text = (SELECT 'Text A', 'Text B') 

所以它创建的所有可能的组合。

如果这样的超级脚本存在,我一定要知道它!

编辑:

我想我的问题是类似this here

+0

为什么不直接在事务中运行多个INSERT呢? –

+0

因为我有一个非常长的ID名单,它会带我永远。 – Nick

+0

整列是否获得相同的值? – ydaetskcoR

回答

1

我发现了一个非常有前景的解决方案是:

INSERT INTO my_table 
    (id, number, text) 
    SELECT array_id, array_number, array_text 
    FROM (SELECT 9 AS array_id UNION 
      SELECT 14 UNION 
      SELECT 19 UNION 
      SELECT 39 UNION 
      SELECT 58 UNION 
      SELECT 15 UNION 
      SELECT 1 UNION 
      SELECT 59 UNION 
      SELECT 40 UNION 
      SELECT 20 UNION 
      SELECT 17 UNION 
      SELECT 69 UNION 
      SELECT 12 UNION 
      SELECT 42 UNION 
      SELECT 22 UNION 
      SELECT 2 UNION 
      SELECT 57 UNION 
      SELECT 1 UNION 
      SELECT 8 UNION 
      SELECT 4) xx 
    CROSS JOIN (SELECT 1 AS array_number 
        UNION SELECT 2 
        UNION SELECT 3 
         ) yy 
    CROSS JOIN (SELECT 'Text A' AS array_text UNION 
          SELECT 'Text B' UNION 
          SELECT 'Text C') zz 

还有就是我画的灵感来自this类似的例子,但矿中含有较多的combitnations。我在SQL小提琴上运行它,它似乎工作。