0

提前致谢。

我有一张桌子,叫做 person_details。这是 person_details 表的示例数据。

ID Name_and_Dept Location
-------------------------------------
1 John Doe - 纽约金融
2 Emmy Joe - IT 波士顿
3 Stella Job - 芝加哥管理员
4 Steve Doe - 洛杉矶金融
5 Frank Chad - 波士顿销售
6 Rich Moss - 纽约管理员

我有两个名为 person_dept 和 person_location 的新表。我需要 person_dept 和 person_location 表中的 person_details 表数据,方法如下。

person_dept

P_ID 名称部门
--------------------------
1 约翰·多伊金融
2 艾美乔 IT
3 斯特拉工作管理员
4 史蒂夫·多伊金融
5 弗兰克乍得销售
6 丰富的苔藓管理员


person_location 表

L_ID 名称 位置
--------------------------
1 John Doe 纽约
2 艾美奖乔波士顿
3 斯特拉乔布芝加哥
4 史蒂夫·多伊 洛杉矶
5 弗兰克·查德·波士顿
6 纽约里奇莫斯

不确定我是否可以使用查询或存储过程或触发器来实现这一点。如果有人可以帮忙,我真的很感激。再次感谢。

4

1 回答 1

0

您正在寻找SUBSTRING_INDEX函数。如果您希望您的表按照您的问题进行结构化,您可以使用两个类似这些的 INSERT 查询而不是触发器:

INSERT INTO person_dept
SELECT
  ID,
  SUBSTRING_INDEX(Name_and_Dept, ' - ', 1),
  SUBSTRING_INDEX(Name_and_Dept, ' - ', -1)
FROM person_details;

INSERT INTO person_location
SELECT
  ID,
  SUBSTRING_INDEX(Name_and_Dept, ' - ', 1),
  Location
FROM person_details;

在此处查看小提琴。如果您需要将记录自动放入 person_dept 和 person_location 表中,则需要一个触发器,您可以从以下内容开始:

DELIMITER |
CREATE TRIGGER populate_tables AFTER
INSERT ON person_details
BEGIN
  INSERT INTO person_dept VALUES
    (new.ID,
     SUBSTRING_INDEX(new.Name_and_Dept, ' - ', 1),
     SUBSTRING_INDEX(new.Name_and_Dept, ' - ', -1)
     );
  INSERT INTO person_location
  VALUES
    (new.ID,
    SUBSTRING_INDEX(new.Name_and_Dept, ' - ', 1),
    new.Location
    );
END;
|
DELIMITER ;
于 2013-08-27T19:28:38.780 回答