Respuestas:
Sí, absolutamente, pero verifique su sintaxis.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Puede poner una constante del mismo tipo que gid
en su lugar, no solo 1, por supuesto. Y acabo de inventar el cid
valor.
OUTPUT
cláusula , que le permite poner lo que haya insertado en otra tabla también. No creo que MySQL tenga un equivalente. Puede crear una tabla temporal , seleccionarla en esa tabla, luego completarla courses
desde esa tabla y luego usar la tabla temporal para cualquier otra cosa que necesite.
Sí lo es. Puedes escribir :
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
o puede obtener valores de otra combinación de la selección ...
Sintaxis correcta: seleccionar la ortografía fue incorrecta
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
Claro, ¿qué quieres usar para el gid? un valor estático, PHP var, ...
Un valor estático de 1234 podría ser como:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Creo que su declaración INSERT es incorrecta, vea la sintaxis correcta: http://dev.mysql.com/doc/refman/5.1/en/insert.html
editar: como Andrew ya señaló ...
Por supuesto que puede.
Sin embargo, debe tenerse en cuenta una cosa: la INSERT INTO SELECT
instrucción copia datos de una tabla y los inserta en otra tabla Y requiere que los tipos de datos en las tablas de origen y destino coincidan. Si los tipos de datos de las columnas de la tabla dada no coinciden (es decir, al intentar insertar VARCHAR
en INT
, o TINYINT
en INT
) el servidor MySQL arrojará un SQL Error (1366)
.
Así que ten cuidado.
Aquí está la sintaxis del comando:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Nota al margen: hay una manera de evitar el problema de inserción de diferentes tipos de columna mediante el uso de la conversión en su SELECT
, por ejemplo:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Esta conversión ( CAST()
es sinónimo de CONVERT()
) es muy útil si sus tablas tienen diferentes juegos de caracteres en la misma columna de la tabla (lo que puede conducir a la pérdida de datos si no se maneja adecuadamente).
La sintaxis correcta para su consulta es:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid