Respostas:
Sim, com certeza, mas verifique sua sintaxe.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Você pode colocar uma constante do mesmo tipo que gid
em seu lugar, e não apenas 1, é claro. E acabei de criar o cid
valor.
OUTPUT
cláusula , que permite colocar o que você inseriu em outra tabela também. Eu não acho que o MySQL tenha um equivalente. Você pode criar uma tabela temporária , selecionar nessa tabela, preencher courses
essa tabela e usar a tabela temporária para o que mais você precisar.
Sim, ele é. Você pode escrever :
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
ou você pode obter valores de outra associação do select ...
Sintaxe correta: a ortografia selecionada estava incorreta
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
Claro, o que você quer usar para o gid? um valor estático, PHP var, ...
Um valor estático de 1234 pode ser como:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Acho que sua instrução INSERT está errada, consulte a sintaxe correta: http://dev.mysql.com/doc/refman/5.1/en/insert.html
edit: como Andrew já apontou ...
Claro que você pode.
No entanto, uma coisa deve ser observada: a INSERT INTO SELECT
instrução copia os dados de uma tabela e os insere em outra tabela E exige que os tipos de dados nas tabelas de origem e destino correspondam. Se os tipos de dados de dados colunas da tabela não corresponde (ou seja, tentando inserir VARCHAR
em INT
, ou TINYINT
para INT
) o servidor MySQL irá lançar umaSQL Error (1366)
.
Por isso tem cuidado.
Aqui está a sintaxe do comando:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Nota lateral: existe uma maneira de contornar o problema de inserção de diferentes tipos de coluna usando a conversão em SELECT
, por exemplo:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Essa conversão ( CAST()
é sinônimo de CONVERT()
) é muito útil se suas tabelas tiverem conjuntos de caracteres diferentes na mesma coluna da tabela (que podem potencialmente levar à perda de dados se não forem tratadas adequadamente).
A sintaxe correta para sua consulta é:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid