47 votes

MySQL : créer une nouvelle table avec les informations 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 affiche le concat et j'en ai besoin pour effectuer ces mises à jour.

161voto

Daniel Hilgarth Points 90722

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.

33voto

Sukumar Points 1829

*Notez que cette méthode ne crée pas de table (selon le titre de l'OP). Pour ce faire, consultez cette réponse .*


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 sélectionnée correspondent.

14voto

Eric Leschinski Points 14289

mysql crée 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)

regarde 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 les informations 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)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X