INSERT с SELECT
У меня есть запрос, который вставляет с помощью select:
INSERT INTO courses (name, location, gid)
SELECT name, location, gid
FROM courses
WHERE cid = $cid
Можно ли только выбрать "имя, местоположение" для вставки и задать gid для чего-то еще в запросе?
Ответы
Ответ 1
Да, абсолютно, но проверьте свой синтаксис.
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
Вы можете поместить константу того же типа, что и gid
, а не только 1, конечно. И я просто составил значение cid
.
Ответ 2
Да, это так. Вы можете написать:
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
или вы можете получить значения из другого соединения select...
Ответ 3
Правильный синтаксис: выбор орфографии был неправильным
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
Ответ 4
Конечно, что вы хотите использовать для gid? статическое значение, PHP var,...
Статическое значение 1234 может быть следующим:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
Ответ 5
Я думаю, что ваш оператор INSERT неверен, см. правильный синтаксис: http://dev.mysql.com/doc/refman/5.1/en/insert.html
изменить:
как уже указывал Андрей...
Ответ 6
Конечно вы можете.
Однако следует отметить одну вещь: оператор INSERT INTO SELECT
копирует данные из одной таблицы и вставляет их в другую таблицу И требует, чтобы типы данных в исходной и целевой таблицах совпадали. Если типы данных из указанных столбцов таблицы не совпадают (т.е. при попытке вставить VARCHAR
в INT
или TINYINT
в INT
) сервер MySQL выдаст SQL Error (1366)
.
Так что будьте осторожны.
Вот синтаксис команды:
INSERT INTO table2 (column1, column2, column3)
SELECT column1, column2, column3 FROM table1
WHERE condition;
Примечание: существует способ обойти проблему вставки разных типов столбцов, используя приведение в SELECT
, например:
SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;
Это преобразование (CAST()
является синонимом CONVERT()
) очень полезно, если у ваших таблиц разные наборы символов в одном и том же столбце таблицы (что может привести к потере данных при неправильной обработке).
Ответ 7
Правильный синтаксис для вашего запроса:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid