Réponses:
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 qu'à gid
sa place, pas seulement 1, bien sûr. Et, je viens de compenser la cid
valeur.
OUTPUT
clause , qui vous permet également de mettre ce que vous avez inséré dans une autre table. Je ne pense pas que MySQL ait un équivalent. Vous pouvez créer une table temporaire , sélectionner dans cette table, puis remplir à courses
partir de cette table, puis utiliser la table temporaire pour tout ce dont vous avez besoin.
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 ...
Syntaxe correcte: l'orthographe sélectionnée était incorrecte
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
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
Je pense que votre instruction INSERT est incorrecte, voir la syntaxe correcte: http://dev.mysql.com/doc/refman/5.1/en/insert.html
edit: comme Andrew l'a déjà souligné ...
Bien sûr vous pouvez.
Il convient toutefois de noter une chose: l' INSERT INTO SELECT
instruction copie les données d'une table et les insère dans une autre table ET requiert que les types de données des tables source et cible correspondent. Si les types de données des colonnes de table données ne correspondent pas (c'est-à-dire en essayant de les insérer VARCHAR
dans INT
ou TINYINT
dans INT
) le serveur MySQL lancera un SQL Error (1366)
.
Donc sois prudent.
Voici la syntaxe de la commande:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Note latérale: Il existe un moyen de contourner le problème d'insertion de différents types de colonnes en utilisant la conversion dans votre SELECT
, par exemple:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Cette conversion ( CAST()
synonyme de CONVERT()
) est très utile si vos tables ont des jeux de caractères différents sur la même colonne de table (ce qui peut potentiellement entraîner une perte de données si elles ne sont pas gérées correctement).
La bonne syntaxe pour votre requête est:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid