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

Ответ 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