331

我有一个使用SELECT语句插入的查询:

INSERT INTO courses (name, location, gid) 
SELECT name, location, gid 
FROM courses 
WHERE cid = $cid

是否可以只为插入选择“名称、位置”,并gid在查询中设置为其他内容?

4

8 回答 8

619

是的,绝对是,但请检查您的语法。

INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM   courses
WHERE  cid = 2

当然,您可以在其位置放置一个相同类型的常量gid,而不仅仅是 1。而且,我只是弥补了cid价值。

于 2011-03-22T12:42:34.627 回答
38

是的。你可以写 :

INSERT INTO courses (name, location, gid) 
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci

或者您可以从 select 的另一个连接中获取值...

于 2011-03-22T12:41:42.223 回答
8

正确的语法:选择拼写错误

INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want' 
FROM courses 
WHERE cid = $ci 
于 2011-03-22T12:44:04.843 回答
6

当然,你想为 gid 使用什么?一个静态值,PHP var,...

静态值 1234 可能类似于:

INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
FROM courses
WHERE cid = $cid
于 2011-03-22T12:41:30.447 回答
2

当然可以。

但是需要注意一件事:该INSERT INTO SELECT语句从一个表中复制数据并将其插入到另一个表中,并且要求源表和目标表中的数据类型匹配。如果来自给定表列的数据类型不匹配(即尝试插入VARCHARINTTINYINTINT),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())非常有用。

于 2019-10-18T11:25:34.943 回答
1

我认为您的 INSERT 语句是错误的,请参阅正确的语法:http ://dev.mysql.com/doc/refman/5.1/en/insert.html

编辑:正如安德鲁已经指出的那样......

于 2011-03-22T12:43:56.823 回答
0

我们都知道这是有效的。

INSERT INTO `TableName`(`col-1`,`col-2`)
SELECT  `col-1`,`col-2` 

============================
在多个“选择”语句的情况下,可以使用以下方法。仅供参考。

INSERT INTO `TableName`(`col-1`,`col-2`)
 select 1,2  union all
 select 1,2   union all
 select 1,2 ;
于 2020-07-13T09:36:18.877 回答
-2

您的查询的正确语法是:

INSERT INTO courses (name, location, gid) 
SELECT (name, location, gid) 
FROM courses 
WHERE cid = $cid
于 2015-10-14T22:26:36.363 回答