it-swarm.com.de

MySQL Wie füge ich eine Tabelle mit einer SELECT-Unterabfrage ein, die mehrere Zeilen zurückgibt?

MySQL Wie füge ich eine Tabelle mit einer SELECT-Unterabfrage ein, die mehrere Zeilen zurückgibt?

  INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON d.id  = f.id
     ),

     (
      "Henry"
     ),
    );

I WANT, um die neue Tabelle mit allen Ergebnissen dieser Unterabfrage zu füllen. Wie mache ich das ohne ein ERROR 1242 (21000): Unterabfrage gibt mehr als eine Zeile zurück

46
stackoverflow
INSERT INTO Results (People, names )
   SELECT d.id, 'Henry'
   FROM Names f
   JOIN People d ON d.id  = f.id

Kombinieren Sie den statischen String Henry mit Ihrer SELECT-Abfrage.

100
Ryan
INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON (d.id  = f.id) limit 1
     ),

     (
      "Henry"
     ),
    );
11

Ich habe festgestellt, dass dies gut funktioniert. Es ist ein wenig lang, aber oft müssen zusätzliche Daten gemischt werden.

Fügen Sie mehrere Zeilen aus Tabelle2 mit den Werten ..__ in Tabelle1 ein. BEISPIELE:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT col1,col2,col3,col4,col5 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

Sie können hartcodierte Werte einfügen, um mehrere Zeilen mit Wiederholungsdaten einzufügen:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT "Value", col2, col3, "1900-01-01","9999-12-31" 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

Beachten Sie Folgendes: "Wert", "1900-01-01", "9999-12-31" wird für alle eingefügten Zeilen wiederholt.

7
MiggityMac
  INSERT INTO Results
    (
     People,
     names,
    )
    SELECT d.id, 'Henry'
    FROM Names f
    JOIN People d ON d.id  = f.id
5
triclosan

Der Grund für diesen Fehler (Unterabfrage gibt mehr als eine Zeile zurück) besteht darin, dass Sie Klammern () verwenden. Achten Sie auf die beste Antwort. Es enthält keine Parethese rund um die Unterabfrage

1
Sveteek

In MySql können mehrere Werte aus Zeichenfolgen wie die folgenden eingefügt werden, um Duplikate zu vermeiden. Vielen Dank.

   insert into brand(name) select * from ( 
select 'Fender' as name 
union select 'a' 
union ..... ) t 
where not exists (select 1 from brand t2 where t2.name COLLATE latin1_general_ci = t.name COLLATE utf8mb4_unicode_ci )
0
Lorenzo