web-dev-qa-db-fra.com

Copiez des lignes d'une table dans une autre à l'aide de la requête INSERT

J'ai une table avec 158 colonnes et 22 000 lignes et j'ai une autre table vide où je veux insérer des valeurs dynamiquement en fonction de la condition WHERE venant de l'utilisateur. La requête SELECT ressemblera à ceci:

SELECT * FROM mygrist_tables WHERE suic_att> = 5 AND gender = 'M'

Cela me donne environ 9 000 enregistrements (disons). Je veux insérer ces enregistrements dans une autre table (juste ces données filtrées). C'est possible? Quelqu'un pourrait-il me donner une idée de l'apparence de la requête INSERT et si je dois créer une autre table avec tous ces 158 cloumns ou la requête INSERT pourrait-elle créer dynamiquement toutes ces 158 colonnes? De plus, pourrais-je le faire en utilisant une vue ou une table serait-elle essentielle? Merci d'avance!

12
Sharadha Jayaraman

Il semble que vous souhaitiez exécuter l'instruction SELECT ci-dessus et INSERT les résultats dans une nouvelle table qui n'existe pas. Si oui, cela devrait fonctionner:

SELECT * INTO YourNewTable
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'

En supposant que YourNewTable existait déjà, vous devez alors exécuter INSERT INTO:

INSERT INTO YourNewTable 
SELECT * 
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M'

Vous pouvez éventuellement avoir besoin de spécifier les colonnes car elles ne sont pas identiques.

[~ # ~] modifier [~ # ~] - Relire les commentaires et réaliser que DB est MySQL, pour créer un nouvelle table à partir d'une instruction SQL, vous devez utiliser:

CREATE TABLE YourNewTable
SELECT *
FROM mygrist_tables 
WHERE suic_att>=5 AND gender='M';

http://dev.mysql.com/doc/refman/5.0/en/create-table.html

24
sgeddes

Vous pouvez utiliser la syntaxe SELECT INTO

SELECT * 
INTO MyNewTable
FROM mygrist_tables WHERE suic_att>=5 AND gender='M'

Mais vous ne pourrez pas insérer dans une table qui existe déjà comme ça. Si votre table existe déjà, vous utiliseriez

INSERT INTO MyOldTable
([LIST OUT YOUR COLUMNS HERE])
SELECT [LIST OUT YOUR COLUMNS HERE] 
FROM mygrist_tables WHERE suic_att>=5 AND gender='M'
5
rbedger