Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用SELECT插入_Mysql_Sql_Insert Select - Fatal编程技术网

Mysql 用SELECT插入

Mysql 用SELECT插入,mysql,sql,insert-select,Mysql,Sql,Insert Select,我有一个使用SELECT语句插入的查询: INSERT INTO courses (name, location, gid) SELECT name, location, gid FROM courses WHERE cid = $cid 是否可以只选择插入的名称、位置,并将gid设置为查询中的其他内容?当然,gid要使用什么?一个静态值,PHP变量 静态值1234可能类似于: INSERT INTO courses (name, location, gid) SELECT name,

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

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

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

当然,gid要使用什么?一个静态值,PHP变量

静态值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

或者,您可以从select…(选择…)的另一个联接中获取值。当然可以,但请检查语法

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

您可以将一个与gid类型相同的常量放在它的位置,当然不仅仅是1。我刚刚编好了cid值。

我认为您的INSERT语句是错误的,请参阅正确的语法:

编辑:
正如安德鲁已经指出的…

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

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错误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;

如果您的表在同一个表列上有不同的字符集,则此转换转换是CONVERT的同义词,如果处理不当,可能会导致数据丢失。

我们都知道这是有效的

INSERT INTO `TableName`(`col-1`,`col-2`)
SELECT  `col-1`,`col-2` 
=========================== 以下方法可用于多个select语句的情况。仅供参考

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

插入课程名称、位置、gid选择名称、位置,“$this->gid”FROM courses,其中cid=$cid-我得到错误:您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行的“name,location,gid SELECT name,location,'22 FROM courses WHERE cid=23”附近使用的正确语法。我猜您的gid字段是一个整数,因此:“22”必须是22。将“$this->gid”更改为$this->gid22和“22”对sql来说应该无关紧要,但我放了一个字符串,以防该字段类似于唯一标识符。已成功,非常感谢。使用Insert Select时,字段名周围不需要括号。但是,当您开始在select顶部指定值时,显然需要在字段名周围添加别名。请注意,在insert子句中不能使用别名:insert INTO COURCES t1 t1.name、t1.location、t1.gid[…]将失败。@Andrew是否有任何方法可以在下次不运行select的情况下返回相同的select?如果我想插入并获得课程的结果table@TAHASULTANTEMURI不同的问题。但是,如果我理解您的要求,SQL Server不是要求什么,而是我现在使用的具有,它允许您将插入的内容也放入另一个表中。我认为MySQL没有类似的功能。您可以在该表中进行选择,然后从该表中填充课程,然后将临时表用于您需要的任何其他内容。