web-dev-qa-db-fra.com

INSERT avec SELECT

J'ai une requête qui insère en utilisant un select:

INSERT INTO courses (name, location, gid) 
            SELECT name, location, gid 
              FROM courses 
             WHERE cid = $cid

Est-il possible de sélectionner uniquement "nom, emplacement" pour l'insertion et de définir gid sur un autre élément de la requête?

260
Kyle

Oui, absolument, mais vérifiez votre syntaxe.

INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM   courses
WHERE  cid = 2

Vous pouvez mettre une constante du même type que gid à sa place, pas seulement 1, bien sûr. Et, je viens de composer la valeur cid.

508
Andrew

Oui, ça l'est. Tu peux écrire :

INSERT INTO courses (name, location, gid) 
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci

ou vous pouvez obtenir des valeurs d'une autre jointure de la sélection ...

28
Dumitrescu Bogdan

Syntaxe correcte: l'orthographe choisie était incorrecte

INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci 
7
RolandoMySQLDBA

Bien sûr, que voulez-vous utiliser pour le gid? une valeur statique, PHP var, ...

Une valeur statique de 1234 pourrait ressembler à:

INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
5
klennepette

Je pense que votre instruction INSERT est fausse, voir la syntaxe correcte: http://dev.mysql.com/doc/refman/5.1/en/insert.html

modifier: comme l'a déjà souligné Andrew ...

1
Tobias