Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL in Auswahl einfügen

Manchmal müssen Sie möglicherweise viele Werte aus einer Tabelle in eine andere Tabelle in MySQL einfügen. Es kann mühsam sein, diese Werte manuell in Ihre INSERT-SQL-Anweisung einzugeben. So können Sie mit der MySQL INSERT INTO SELECT-Abfrage ganz einfach die SELECT-Anweisung verwenden, um Werte in die Tabelle einzufügen. Sie können damit schnell MySQL-Tabellen füllen.

MySQL-Insert in Select

Hier sind die Schritte zum Einfügen von Werten in MySQL-Tabellen mit der Anweisung INSERT INTO SELECT. Nehmen wir an, Sie haben die folgende Tabelle new_orders(id, order_date, amount)

mysql> create table new_orders(id int, order_date date, amount int);

Hier ist die Syntax für die MySQL INSERT INTO SELECT-Anweisung.

INSERT INTO table_name(column_list)
SELECT 
   select_list 
FROM 
   another_table
WHERE
   condition;

In der obigen Abfrage verwenden wir eine SELECT-Anweisung anstelle der VALUES-Klausel. Es ist sehr nützlich, schnell eine oder mehrere Zeilen aus einer anderen Tabelle oder sogar Zusammenfassungsdaten aus einer anderen Tabelle zu kopieren.

Bonus-Lesetext:MySQL wählt die oberen N Zeilen aus

Sehen wir uns einige Beispiele für MySQL INSERT INTO SELECT.

an

MySQL INSERT INTO SELECT MULTIPLE ROWS

Hier ist die SQL-Abfrage zum Einfügen mehrerer Zeilen in eine Tabelle mit der Anweisung INSERT INTO SELECT.

mysql> insert into new_orders
       select id, order_date, item_price
       from orders;

mysql> select * from new_orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
+------+------------+--------+

Sie können die Spaltennamen nach der INSERT-Klausel weglassen, wenn die Spaltennamen in der SELECT-Anweisung mit denen in Ihrer Tabelle identisch sind.

Bonus-Leseartikel:MySQL entfernt doppelte Datensätze

MySQL INSERT INTO AUS DERSELBEN TABELLE AUSWÄHLEN

Hier ist die SQL-Abfrage zum Einfügen von Zeilen aus derselben Tabelle mit der Anweisung INSERT INTO SELECT.

mysql> insert into new_orders
       select *
       from new_orders;

mysql> select * from new_orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
+------+------------+--------+

In der obigen Abfrage verwenden wir MySQL INSERT INTO SELECT für alle Spalten in einer Tabelle.

Bonus-Lesetext:Wie man gespeicherte Prozeduren ausführt

MySQL INSERT INTO SELECT aus einer anderen Datenbank

Hier ist die SQL-Abfrage zum Einfügen von Zeilen aus einem anderen Datenbank-Dashboard . Der einzige Unterschied besteht darin, den Datenbanknamen Ihrem Tabellennamen in der SELECT-Abfrage voranzustellen.

mysql> insert into users (user_id,date_joined)
select id,date_joined
from dashboard.auth_user;

In der obigen Abfrage haben wir dashboard.auth_user verwendet statt nur auth_user um anzugeben, dass sich diese Tabelle in einer anderen Datenbank befindet.

Bonus-Lesetext:MySQL erhält doppelte Datensätze

MySQL INSERT INTO SELECT bei doppelter Aktualisierung

Wenn Sie doppelte Primärschlüssel- oder Indexwerte in eine Tabelle einfügen, gibt MySQL einen Fehler aus. In der Anweisung INSERT INTO SELECT können Sie MySQL auch anweisen, bestimmte Spalten im Falle doppelter Werte zu aktualisieren, indem Sie die Klausel ON DUPLICATE KEY UPDATE verwenden. Hier ist ein Beispiel für MySQL INSERT INTO SELECT bei doppelter Aktualisierung.

Nehmen wir an, Sie haben die folgende Tabelle x_orders(id, amount)

mysql> create table x_orders(id int auto_increment primary key, amount int);

Nehmen wir an, Sie haben eine new_orders-Tabelle mit doppelten Werten für die ID-Spalte.

mysql> select * from new_orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
|    1 | 2020-07-01 |    150 |
|    2 | 2020-07-01 |    235 |
+------+------------+--------+

Angenommen, Sie versuchen, Werte aus der Tabelle new_orders in x_orders einzufügen. Sie erhalten eine Fehlermeldung wie gezeigt.

mysql> insert into x_orders(id,amount)
       select id, amount
       from new_orders;
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Hier ist die zu verwendende SQL-Klausel ON DUPLICATE KEY UPDATE.

mysql> insert into x_orders(id,amount)
       select id, amount
       from new_orders
       on duplicate key update id = RAND() * 100;

mysql> select * from x_orders;
+----+--------+
| id | amount |
+----+--------+
| 27 |    235 |
| 48 |    150 |
| 58 |    235 |
| 62 |    150 |
+----+--------+

Ubiq macht es einfach, Daten innerhalb von Minuten zu visualisieren und in Echtzeit-Dashboards zu überwachen. Probieren Sie es noch heute aus!