我有一个使用SELECT
语句插入的查询:
INSERT INTO courses (name, location, gid)
SELECT name, location, gid
FROM courses
WHERE cid = $cid
是否可以只为插入选择“名称、位置”,并gid
在查询中设置为其他内容?
我有一个使用SELECT
语句插入的查询:
INSERT INTO courses (name, location, gid)
SELECT name, location, gid
FROM courses
WHERE cid = $cid
是否可以只为插入选择“名称、位置”,并gid
在查询中设置为其他内容?
是的,绝对是,但请检查您的语法。
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
或者您可以从 select 的另一个连接中获取值...
正确的语法:选择拼写错误
INSERT INTO courses (name, location, gid)
SELECT name, location, 'whatever you want'
FROM courses
WHERE cid = $ci
当然,你想为 gid 使用什么?一个静态值,PHP var,...
静态值 1234 可能类似于:
INSERT INTO courses (name, location, gid)
SELECT name, location, 1234
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 语句是错误的,请参阅正确的语法:http ://dev.mysql.com/doc/refman/5.1/en/insert.html
编辑:正如安德鲁已经指出的那样......
我们都知道这是有效的。
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 ;
您的查询的正确语法是:
INSERT INTO courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid