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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top