2013-08-27 2 views
0

Спасибо заранее.mysql query - как мне нужно разбить данные таблицы

У меня есть стол, называемый person_details. Вот пример dat таблицы person_details.

 
ID Name_and_Dept   Location 
------------------------------------- 
1  John Doe - Finance New York 
2  Emmy Joe - IT   Boston 
3  Stella Job - Admin Chicago 
4  Steve Doe - Finance Los Angeles 
5  Frank Chad - Sales Boston 
6  Rich Moss - Admin  New York 

У меня есть две новые таблицы, называемые person_dept и person_location. Мне нужны данные таблицы person_details в таблицах person_dept и person_location следующим образом.

person_dept стол

 
P_ID Name   Dept 
--------------------------- 
1  John Doe  Finance 
2  Emmy Joe  IT 
3  Stella Job Admin 
4  Steve Doe  Finance 
5  Frank Chad Sales 
6  Rich Moss  Admin 


person_location стол

 
L_ID Name   Location 
--------------------------- 
1  John Doe  New York 
2  Emmy Joe  Boston 
3  Stella Job Chicago 
4  Steve Doe  Los Angeles 
5  Frank Chad Boston 
6  Rich Moss  New York 

Не уверен, что если я могу добиться этого с помощью запроса или хранимая процедура или триггер. Я очень ценю, если кто-то может помочь. Еще раз спасибо.

ответ

0

Вы ищете SUBSTRING_INDEX функцию. Если вы хотите, чтобы ваши таблицы strutcured, как в вашем вопросе, вы можете использовать два 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 ; 
+0

Спасибо за ответ. Когда новые записи добавляются в таблицу person_details, я хочу, чтобы записи автоматически заполнялись в person_dept и person_location. Я думаю, нам нужен триггер для этого. Как вы думаете? – Ram

+0

@ram да, вам нужен триггер для этого, см. Мой обновленный ответ. Я не могу создать скрипку, но она будет работать на mysql. Кроме того, я только рассматриваю возможность вставки новых строк, если вам нужно обновить выходящие, я могу обновить свой ответ. – fthiella

+0

Спасибо, fthiella, я очень ценю вашу помощь. – Ram

Смежные вопросы