95 votes

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

Comme le titre l'indique, j'essaie d'insérer dans un tableau des valeurs sélectionnées dans un autre tableau et des 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 column count does not match.

Que dois-je faire ?

229voto

Nican Points 3583

Vous devez simplement le faire :

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

12voto

kanishka vatsa Points 402

Si vous voulez insérer toutes les colonnes, alors

insert into def select * from abc;

ici le nombre de colonnes dans def doit ê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 en dur, alors

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

11voto

Frankie Points 144
INSERT INTO def (field_1, field_2, field3) 
VALUES 
('$field_1', (SELECT id_user from user_table where name = 'jhon'), '$field3')

7voto

Redips77 Points 31

Si vous voulez copier un sous-ensemble de la table source, vous pouvez le 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 destination, vous pouvez faire plus simplement :

INSERT INTO def 
SELECT * from `abc`

2voto

crmpicco Points 2226

Avec MySQL, si vous insérez dans une table qui a une clé primaire à incrémentation automatique et que vous voulez utiliser une fonction MySQL intégrée telle que NOW() alors vous pouvez faire quelque chose comme ça :

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;

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