Answers:
是的,绝对可以,但是请检查您的语法。
INSERT INTO courses (name, location, gid)
SELECT name, location, 1
FROM courses
WHERE cid = 2
您可以放置gid
与其位置相同类型的常量,而不只是1。而且,我只是弥补了cid
价值。
OUTPUT
子句,它可使您将插入的任何内容也放入另一个表中。我不认为MySQL具有等效功能。您可以创建一个临时表,选择该表,然后courses
从该表填充,然后将temp表用于您需要的其他任何内容。
是的。你可以写 :
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
我认为您的INSERT陈述式有误,请参阅正确的语法: http //dev.mysql.com/doc/refman/5.1/en/insert.html
编辑:正如安德鲁已经指出...
当然可以。
但是,应注意一件事:该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 courses (name, location, gid)
SELECT (name, location, gid)
FROM courses
WHERE cid = $cid