2014-05-22 65 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小提琴上運行它,它似乎工作。