我有一个表Employees和一个表Manages。在我的表管理中,我有ManagerID和SubordinateID,它们一起形成一个主键。ManagerID en SubordinateID都是引用EmployeeID的外键。我如何编写代码来实现经理管理的所有员工ID。
例如,员工ID为1的经理1管理EmployeeID为2、4、5和13的员工。
INSERT INTO `Manages` (`ManagerID`, `SubordinateID`) VALUES ('1', '2,4,5,13');
INSERT INTO `Manages` (`ManagerID`, `SubordinateID`) VALUES ('2', '6,10,5');
INSERT INTO `Manages` (`ManagerID`, `SubordinateID`) VALUES ('4', '10,5,7');
INSERT INTO `Manages` (`ManagerID`, `SubordinateID`) VALUES ('3', '7,8,9');
INSERT INTO `Manages` (`ManagerID`, `SubordinateID`) VALUES ('11', '12');怎么了?我得到了以下错误:
ERROR 1265: 1265: Data truncated for column 'SubordinateID' at row 1
SQL Statement:
INSERT INTO `group22`.`Manages` (`ManagerID`, `SubordinateID`) VALUES ('1', '2,4,5,13')发布于 2020-12-03 00:34:55
我认为这是因为逗号是sql中的一个特殊字符,我希望您可以对其进行转义。但最好的方法是改变你的员工和经理之间的关系。在这里,我将根据您的需要描述一些情况:
I) OneToMany
如果您的员工只由一个经理管理,那么您可以创建一个OneToMany关系。因此,每个员工都有一个manager_id字段,该字段是与经理相关的外键。
II)递归OneToMany
如果您没有任何Managers表,则Employees会引用其自身
III) ManyToMany
如果您的员工可以由一个或多个经理管理,则应该实现ManyToMany关系。您需要第三个表,并且需要在其中使用2个外部键(一个用于经理,一个用于员工)存储经理/员工的每个组合。
IV)递归ManyToMany
如果您只有一个Employees表,只需创建两个引用同一表的外键字段即可。毕竟,经理也是雇员。
发布于 2020-12-03 00:53:01
Manages看起来像是一个表,每个经理和下属占一行。
您需要单独插入每一行。因此,不是:
INSERT INTO `Manages` (`ManagerID`, `SubordinateID`)
VALUES ('1', '2,4,5,13');您将使用:
INSERT INTO `Manages` (`ManagerID`, `SubordinateID`)
VALUES (1, 2), (1, 4), (1, 5), (1, 13);此外,不要对数字常量使用单引号。它们指示该值是一个字符串。
https://stackoverflow.com/questions/65111922
复制相似问题