搜尋

首頁  >  問答  >  主體

您可以 INSERT SELECT 多行而不需要每次都對同一行執行 select 嗎?

如果我有一個表,並且需要另一個值中的一個值,而其他值來自其他地方,我是否必須每次都運行選擇?

INSERT INTO table1 (name, otherValue) VALUES 
(SELECT name FROM table2 WHERE id = 1, outsideValue1),
(SELECT name FROM table2 WHERE id = 1, outsideValue2),
(SELECT name FROM table2 WHERE id = 1, outsideValue3);

所以名稱是相同的,而 otherValue 每次都不同,我試著批次插入。

P粉304704653P粉304704653489 天前489

全部回覆(1)我來回復

  • P粉269847997

    P粉2698479972023-09-08 00:08:10

    一種方法是將「其他值」放入衍生表中,以便與單一來源記錄交叉連接:

    INSERT INTO table1 (name, otherValue)
    SELECT t2.name, v.val
    FROM table2 t2
    CROSS JOIN (
        SELECT 'val1' as val
        UNION ALL SELECT 'val2'
        UNION ALL SELECT 'val3'
    ) v
    WHERE t2.id = 1

    在MySQL 8.0.19以上版本中,我們可以使用VALUES/ROW語法:

    INSERT INTO table1 (name, otherValue)
    SELECT t2.name, v.val
    FROM table2 t2
    CROSS JOIN (VALUES 
        ROW('val1'),
        ROW('val2'),
        ROW('val3')
    ) v(val)
    WHERE t2.id = 1

    回覆
    0
  • 取消回覆