Heim  >  Fragen und Antworten  >  Hauptteil

Können Sie INSERT SELECT in mehreren Zeilen ausführen, ohne jedes Mal select für dieselbe Zeile auszuführen?

Wenn ich eine Tabelle habe und einen Wert von einer anderen benötige und die anderen Werte von woanders kommen, muss ich dann jedes Mal die Auswahl ausführen?

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);

Der Name ist also derselbe und otherValue ist jedes Mal anders, wenn ich versuche, ihn stapelweise einzufügen.

P粉304704653P粉304704653378 Tage vor430

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort