web-dev-qa-db-fra.com

mysql -> insérer dans tbl (sélectionner dans une autre table) et certaines valeurs par défaut

Comme le titre l'indique, j'essaie de l'insérer dans une table en sélectionnant les valeurs d'une autre table et certaines valeurs par défaut.

INSERT INTO def (catid, title, page, publish) 
(SELECT catid, title from abc),'page','yes')


INSERT INTO def (catid, title, page, publish) 
VALUES
((SELECT catid, title from abc),'page','yes'))

La première requête donne une erreur mysql et la seconde donne le nombre de colonnes ne correspond pas.

Qu'est-ce que je dois faire?

95

Vous devez simplement faire:

INSERT INTO def (catid, title, page, publish) 
SELECT catid, title, 'page','yes' from `abc`
226
Nican

Si vous voulez insérer toutes les colonnes alors

insert into def select * from abc;

ici, le nombre de colonnes en def devrait être égal à abc.

si vous voulez insérer les sous-ensembles de colonnes alors

insert into def (col1,col2, col3 ) select scol1,scol2,scol3 from abc; 

si vous voulez insérer des valeurs enregistrées alors

insert into def (col1, col2,col3) select 'hardcoded value',scol2, scol3 from abc;
8
kanishka vatsa

Si vous voulez copier un sous-ensemble de la table source, vous pouvez faire:

INSERT INTO def (field_1, field_2, field3)

SELECT other_field_1, other_field_2, other_field_3 from `abc`

ou pour copier TOUS les champs de la table source à la table de destination, vous pouvez faire plus simplement:

INSERT INTO def 
SELECT * from `abc`
7
Redips77
INSERT INTO def (field_1, field_2, field3) 
VALUES 
('$field_1', (SELECT id_user from user_table where name = 'jhon'), '$field3')
4
Frankie

Avec MySQL, si vous insérez dans une table dotée d'une clé primaire à incrémentation automatique et que vous souhaitez utiliser une fonction MySQL intégrée telle que NOW(), vous pouvez procéder de la manière suivante:

INSERT INTO course_payment 
SELECT NULL, order_id, payment_gateway, total_amt, charge_amt, refund_amt, NOW()
FROM orders ORDER BY order_id DESC LIMIT 10;
2
crmpicco