MySQL: création d'une nouvelle table avec des informations à partir d'une requête

Dans MySQL, je voudrais créer une nouvelle table avec toutes les informations de cette requête:

select * into consultaa2 from SELECT
 CONCAT(    'UPDATE customers SET
 customers_default_address_id= ',    
 (SELECT a.address_book_id FROM
 address_book a where
 c.customers_id=a.customers_id order by
 address_book_id desc limit 1),    '
 WHERE customers_id = ', customers_id,
 ';') AS sql_statement FROM customers c
 where c.customers_id > 3894;

La requête est trop longue pour que le navigateur montre le concat et j'en ai besoin pour faire ces mises à jour.

27
demandé sur Eric Leschinski 2011-07-06 14:55:22

3 réponses

L'insertion dans une table avec les informations d'une requête est du format

INSERT INTO <TABLE-1> 
SELECT * FROM <TABLE-2>

Dans votre cas, ce serait

insert into consultaa2 
SELECT CONCAT( 'UPDATE customers SET customers_default_address_id= ',
(SELECT a.address_book_id FROM address_book a where c.customers_id=a.customers_id order by address_book_id desc limit 1), ' WHERE customers_id = ', customers_id, ';') AS sql_statement FROM customers c where c.customers_id > 3894;

Assurez-vous simplement que les colonnes de la table dans laquelle vous insérez et les colonnes renvoyées par la requête select correspondent.

15
répondu Sukumar 2014-02-17 18:29:00

, Vous pouvez le faire comme ceci:

CREATE TABLE tablename SELECT * FROM othertable;

tablename est le nom de la nouvelle table que vous souhaitez créer, SELECT * FROM othertable est la requête qui renvoie les données à partir desquelles la table doit être créée.

100
répondu Daniel Hilgarth 2011-07-06 10:59:02

Mysql créer une nouvelle table

Exemple de la ligne de commande mysql.

mysql> create table foo(id int, vorta text);
Query OK, 0 rows affected (0.02 sec)

Insérer des lignes

mysql> insert into foo values(1, 'for the hoarde');
Query OK, 1 row affected (0.00 sec)

Regardez ce qu'il y a dedans

mysql> select * from foo;
+------+----------------+
| id   | vorta          |
+------+----------------+
|    1 | for the horde  |
+------+----------------+
1 row in set (0.00 sec)

Créer une nouvelle table avec des informations à partir d'une requête

mysql> create table foo2 select * from foo;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

Vérifiez si les données ont été déplacées

mysql> select * from foo2;
+------+----------------+
| id   | vorta          |
+------+----------------+
|    1 | for the horde  |
+------+----------------+
1 row in set (0.00 sec)
8
répondu Eric Leschinski 2014-02-17 18:35:49