用SELECT插入

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

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

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

449880 次浏览

当然,gid要用什么?一个静态值,PHP var,…

1234的静态值可能是这样的:

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

是的,它是。你可以这样写:

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

或者你可以从选择的另一个连接中获取值…

是的,当然,但是请检查一下语法。

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

你可以在它的位置放置一个与gid相同类型的常量,当然不只是1。并且,我刚刚创建了cid值。

语法正确:选择拼写错误

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

正确的查询语法是:

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

你当然可以。

但是有一点需要注意: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()的同义词)是非常有用的。

我们都知道这很有效。

INSERT INTO `TableName`(`col-1`,`col-2`)
SELECT  `col-1`,`col-2`
< p >===========================< br > 以下方法可用于多个“选择”的情况;语句。

INSERT INTO `TableName`(`col-1`,`col-2`)
select 1,2  union all
select 1,2   union all
select 1,2 ;