我有一个使用select:
插入的查询INSERT INTO courses (name, location, gid)
SELECT name, location, gid
FROM courses
WHERE cid = $cid
是否可以只选择插入的“名称,位置”,并将gid设置为查询中的其他内容?
答案 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
插入INT
或TINYINT
插入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