0

前もって感謝します。

person_details というテーブルがあります。person_details テーブルのサンプル データは次のとおりです。

ID Name_and_Dept 所在地
--------------------------------------
1 John Doe - ファイナンス ニューヨーク
2 エミー・ジョー - IT ボストン
3 Stella Job - 管理者シカゴ
4 スティーブ ドウ - ファイナンス ロサンゼルス
5 フランク チャド - セールス ボストン
6 リッチ・モス - Admin New York

person_dept と person_location という 2 つの新しいテーブルがあります。次の方法で、person_dept テーブルと person_location テーブルの両方に person_details テーブル データが必要です。

person_deptテーブル

P_ID 名前 部門
---------------------------
1 ジョン・ドウ・ファイナンス
2 エミー・ジョー IT
3 ステラ ジョブ管理者
4 スティーブ・ドウ・ファイナンス
5 フランク チャド セールス
6 リッチモスアドミン


person_location テーブル

L_ID 名前 場所
---------------------------
1 ジョン・ドゥ・ニューヨーク
2 エミー・ジョー・ボストン
3 ステラ ジョブ シカゴ
4 スティーブ・ドウ ロサンゼルス
5 フランク・チャド・ボストン
6 リッチ モス ニューヨーク

クエリ、ストアド プロシージャ、またはトリガーを使用してこれを達成できるかどうかはわかりません。誰かが助けてくれれば本当に感謝します。再度、感謝します。

4

1 に答える 1

0

SUBSTRING_INDEX関数を探しています。質問のようにテーブルを構造化する場合は、トリガーの代わりに次のような 2 つの 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 に答える