INSERISCI con SELEZIONA
-
28-10-2019 - |
Domanda
Ho una query che inserisce utilizzando un select:
INSERT INTO courses (name, location, gid)
SELECT name, location, gid
FROM courses
WHERE cid = $cid
È possibile selezionare solo "nome, posizione" per l'inserimento e impostare gid su qualcos'altro nella query?
Soluzione
Sì, assolutamente, ma controlla la tua sintassi.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Puoi inserire una costante dello stesso tipo di gid
al suo posto, non solo 1, ovviamente.E ho appena creato il valore cid
.
Altri suggerimenti
Sì, lo è.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: la selezione dell'ortografia era sbagliata
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, var PHP, ...
Un valore statico di 1234 potrebbe essere:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Penso che la tua istruzione INSERT sia sbagliata, vedi la sintassi corretta: http://dev.mysql.com/doc/refman/5.1/en/insert.html
modifica: come Andrew ha già sottolineato ...
Certo che puoi.
Tuttavia, occorre notare una cosa: l'istruzione INSERT INTO SELECT
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 dalle colonne della tabella specificate non corrispondono (ad esempio, tentando di inserire VARCHAR
in INT
o TINYINT
inINT
) il server MySQL lancerà un SQL Error (1366)
.
Quindi 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 il problema di inserimento di diversi tipi di colonna utilizzando 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 sulla stessa colonna della tabella (che può potenzialmente portare alla perdita di dati se non gestita correttamente).
La sintassi corretta per la tua query è:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid