Risposte:
Sì, assolutamente, ma controlla la tua sintassi.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Puoi mettere una costante dello stesso tipo gid
al suo posto, non solo 1, ovviamente. E ho appena inventato il cid
valore.
OUTPUT
clausola , che ti consente di inserire anche ciò che hai inserito in un'altra tabella. Non penso che MySQL abbia un equivalente. È possibile creare una tabella temporanea , selezionare in quella tabella, quindi popolare courses
da quella tabella, quindi utilizzare la tabella temporanea per qualsiasi altra cosa necessaria.
Sì. Tu puoi scrivere :
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
oppure puoi ottenere valori da un altro join della selezione ...
Sintassi corretta: selezionare l'ortografia era errata
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
Certo, cosa vuoi usare per il gid? un valore statico, PHP var, ...
Un valore statico di 1234 potrebbe essere come:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Penso che la tua dichiarazione INSERT sia errata, vedi la sintassi corretta: http://dev.mysql.com/doc/refman/5.1/en/insert.html
modifica: come Andrew ha già sottolineato ...
Certo che puoi.
Una cosa va comunque nota: l' INSERT INTO SELECT
istruzione copia i dati da una tabella e li inserisce in un'altra tabella E richiede che i tipi di dati nelle tabelle di origine e di destinazione corrispondano. Se i tipi di dati da dati colonne della tabella non corrisponde (vale a dire cercando di inserire VARCHAR
in INT
, o TINYINT
in INT
), il server MySQL viene generato unSQL Error (1366)
.
Perciò stai attento.
Ecco la sintassi del comando:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Nota a margine: esiste un modo per aggirare i diversi problemi di inserimento dei tipi di colonna usando il casting nel tuo SELECT
, ad esempio:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Questa conversione ( CAST()
è sinonimo di CONVERT()
) è molto utile se le tue tabelle hanno set di caratteri diversi nella stessa colonna della tabella (che può potenzialmente portare alla perdita di dati se non gestita correttamente).
La sintassi giusta per la tua query è:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid