【问题标题】:mysql query - how do I need to split the table datamysql查询 - 我需要如何拆分表数据
【发布时间】:2013-08-27 19:18:19
【问题描述】:

提前致谢。

我有一张名为 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 纽约里奇莫斯

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

【问题讨论】:

    标签: mysql stored-procedures triggers


    【解决方案1】:

    您正在寻找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;
    

    请看小提琴here。如果您需要将记录自动放入 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 ;
    

    【讨论】:

    • 感谢您的回复。当新记录添加到 person_details 表时,我希望记录自动填充到 person_dept 和 person_location 表中。我认为我们需要一个触发器来做到这一点。你怎么看?
    • @ram 是的,您需要为此触发,请参阅我的更新答案。我无法创建小提琴,但它可以在 mysql 上运行。另外,我只考虑插入新行,如果您需要更新现有行,我可以更新我的答案
    • 谢谢你,fthiella,非常感谢你的帮助。
    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多