web-dev-qa-db-fra.com

insérer des données d'une table à une autre dans mysql

je veux lire toutes les données d'une table et insérer des données dans une autre table. ma requête est 

  INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
  VALUES ( 
      (SELECT magazine_subscription_id, 
              subscription_name, 
              magazine_id 
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC), '1')

mais j'ai eu une erreur 

  #1136 - Column count doesn't match value count at row 1

aidez-moi, s'il vous plaît.

46
deepu sankar

Vous pouvez utiliser INSERT ... SELECT syntax. Notez que vous pouvez citer '1' directement dans la partie SELECT.

INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
SELECT magazine_subscription_id, 
       subscription_name, 
       magazine_id, 
       '1'
FROM tbl_magazine_subscription
ORDER BY magazine_subscription_id ASC 
95
Gustav Bertram

Si vous voulez insérer toutes les données d'une table dans une autre, il y a tout simplement SQL

INSERT INTO destinationTable  (SELECT * FROM sourceDbName.SourceTableName);
15
Ravi

Cela ne fonctionnera pas comme ça.

Lorsque vous essayez d'insérer la ligne à l'aide d'une requête, toutes les valeurs doivent figurer dans la requête.

Avec le problème ci-dessus que vous voulez insérermagazine_subscription_id, subscription_name, magazine_id, statusin sélectionnez la requête que vous avez magazine_subscription_id, subscription_name, magazine_id, status 1 ce n'est pas possible.

Si vous voulez insérer soit vous devez insérer en utilisant une requête de valeurs directes

5
Praveen

S'il existe une clé primaire telle que "id", vous devez l'exclure. Par exemple, ma table php contient: id, col2, col3, col4. id est la clé primaire, donc si je lance ce code:

INSERT INTO php  (SELECT * FROM php);

J'ai probablement cette erreur:

#1062 - Duplicate entry '1' for key 'PRIMARY'

Alors voici la solution, j'ai exclu la clé "id":

INSERT INTO php ( col2,col3,col4)  (SELECT col2,col3,col4 FROM php2);

Donc, ma nouvelle table php a toutes les lignes de la table php2 plus.

1
BARIS KURT
  INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
  VALUES ( 
      (SELECT magazine_subscription_id, 
              subscription_name, 
              magazine_id,'1' as status
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC))
0
arvin_codeHunk
INSERT INTO mt_magazine_subscription ( 
      magazine_subscription_id, 
      subscription_name, 
      magazine_id, 
      status ) 
VALUES ( 
      (SELECT magazine_subscription_id, 
              subscription_name, 
              magazine_id,'1' as status
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC));
0
Guryash Singh

Essaye ça. Vous faites de la mauvaise façon.

    INSERT INTO mt_magazine_subscription( 
    magazine_subscription_id, 
    subscription_name, 
    magazine_id, status) VALUES ( 
         (SELECT magazine_subscription_id, subscription_name, 
                 magazine_id,1 as status FROM tbl_magazine_subscription 
                 ORDER BY magazine_subscription_id ASC)
    )
0
Amit Garg