我有一个使用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设置为查询中的其他内容?
当然,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错误(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`
=========================== 下面的方法可以在多个“select”语句的情况下使用。只是为了提供信息。
INSERT INTO `TableName`(`col-1`,`col-2`)
select 1,2 union all
select 1,2 union all
select 1,2 ;