问题描述
我想从该表中复制 1 行:
tableold
-----------
oid (primary key,auto_incremment)
name
age
detail
到这张桌子:
tablenew
------------
nid (primary key,auto_incremment)
fid (foreign key to another table)
name
age
detail
使用此 sql 命令:
INSERT INTO tablenew (tablenew.name,tablenew.age,tablenew.detail)
SELECT tableold.name,tableold.age,tableold.detail
FROM tableold
WHERE tableold.oid = 123;
但我收到错误:
是否可以手动将外键“fid”添加到 sql-Command 中?
*编辑,我添加了 CREATE 表语句:
CREATE TABLE `othertable` (
`fid` int NOT NULL AUTO_INCREMENT,`value1` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`value2` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`value3` longtext CHaraCTER SET utf8 COLLATE utf8_general_ci,`value4` longtext CHaraCTER SET utf8 COLLATE utf8_general_ci,PRIMARY KEY (`fid`),) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8;
CREATE TABLE `tablenew` (
`nid` int NOT NULL AUTO_INCREMENT,`fid` int NOT NULL,`name` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`detail` varchar(255) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`sid`),KEY `fid_fkey` (`fid`),CONSTRAINT `fid_fkey` FOREIGN KEY (`fid`) REFERENCES `othertable` (`fid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
CREATE TABLE `tableold` (
`oid` int NOT NULL AUTO_INCREMENT,`name` varchar(60) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`age` varchar(60) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,`detail` varchar(60) CHaraCTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`oid`)
) ENGINE=InnoDB AUTO_INCREMENT=157 DEFAULT CHARSET=utf8;
解决方法
我已经解决了:
INSERT INTO tablenew (tablenew.fid,tablenew.name,tablenew.age,tablenew.detail)
SELECT 'value',tableold.name,tableold.age,tableold.detail
FROM tableold
WHERE tableold.oid = value;