INSERT与SELECT

时间:2011-03-22 12:38:53

标签: mysql sql insert-select

我有一个使用select:

插入的查询
INSERT INTO courses (name, location, gid) 
            SELECT name, location, gid 
              FROM courses 
             WHERE cid = $cid

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

8 个答案:

答案 0 :(得分:496)

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

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

当然,您可以在其位置放置与gid相同类型的常量,而不仅仅是1。而且,我只是编造了cid值。

答案 1 :(得分:27)

是的,确实如此。你可以写:

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

或者你可以从select ...

的另一个连接中获取值

答案 2 :(得分:7)

正确语法:选择拼写错误

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

答案 3 :(得分:5)

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

静态值1234可能如下:

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

当然可以。

但是,应注意一件事:INSERT INTO SELECT语句从一个表中复制数据并将其插入到另一个表中。并要求,源表和目标表中的数据类型必须匹配。如果给定表列中的数据类型不匹配(即尝试将VARCHAR插入INTTINYINT插入INT),则MySQL服务器将抛出{{1} }。

所以要小心。

以下是命令的语法:

SQL Error (1366)

侧面说明:您可以在INSERT INTO table2 (column1, column2, column3) SELECT column1, column2, column3 FROM table1 WHERE condition; 中使用casting来避免不同的列类型插入问题,例如:

SELECT

如果您的表在同一表列上具有不同的字符集(如果处理不当,可能会导致数据丢失)。此转换(SELECT CAST('qwerty' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin; CAST()的同义词)非常有用。 / p>

答案 6 :(得分: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 ;

答案 7 :(得分:-2)

您的查询的正确语法是:

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