web-dev-qa-db-fra.com

Trouver et insérer une ligne à une autre table à l'aide de la gâchette MySQL

Je les trois tableaux suivants dans la base de données MySQL nommé My_Company

[. .____] mysql> desc employé; [. .____] + ---------- + ------------- + ------ + - --- + --------- + ------- + 
 | champ | Tapez | null | clé | Par défaut | Extra | [. .____] + ---------- + ------------- + ------ + ----- + ---- ----- + ------- + 
 | Id | int (11) | NO | PRI | 0 | | [.____] |. Emp_name | varchar (20) | OUI | | NULL | | [.____] |. Division | varchar (20) | OUI | | NULL | | [. .____] + ---------- + ------------- + ------ + ----- + ---- 
 ----- + ------- + 3 rows in set (0.00 sec) 
 [.] .____ mysql> desc outils; [.] .____ + - + ------------- + --------- + ------ ----- + --------- + --- ---- + 
 | Champ | type de | Null | clé | défaut | supplémentaire | [. .____] + ----------- + --------- ---- + ------ + ----- + --------- + ------- + 
 | Division | varchar (20) | NO | PRI | | | [.____] |. Tool_No | int (11) | NO | PRI | 0 | |. [.____] | tool_name | varchar (20) | OUI | | NULL | | [. .____] + ----------- + ------------- + ------ + ----- + --------- + ------- + 
 3 rows in set (0.01 sec) 
 
 mysql> desc employee_tools; 
 + ------- + ------------- + ------ + ----- + ------ --- + ------- + 
 | Champ | type de | Null | clé | défaut | supplémentaire | [. .____] + ------- + ------ ----- - + ------ + ----- + --------- + ------- + [. .____] | Id | int (11) | OUI | | NULL | | 
 | outil | varchar (20) | OUI | | NULL | | [. .____] + ------- + ------------- + ------ + ----- + -------- - [. .____] + ------- + 2 rangées dans l'ensemble (0,02 sec) [. .____] [. .____] ----------------- -------------------------------------------------- - 

Je dois insérer les lignes d'outils de table à employee_tools lors insérer une nouvelle ligne sur table employee.

Par exemple, si j'insérer une nouvelle ligne aux valeurs des employés comme ('1', 'Michel', 'Network') Alors le déclencheur doit trouver le tool_No & tool_names De la division des outils de table et ajoutez les lignes à employee_tools

 Mysql> insert en valeurs de personnel ( '1', 'Michel', 'réseau'); [. .____] [. .____] [. .____] Query OK, une ligne affectée (0,05 sec) mysql> select * de l'employé; 
 + ---- + ---------- + ---------- + 
 | Id | emp_name | Division | 
 + ---- + ---------- + ---------- + 
 | 1 | Michel | Réseau | 
 + ---- + ---------- + ---------- + 
 1 row in set (0.00 sec) [. .. ____] [.____] mysql> select * des outils;. [.____] + ---------- + --------- + -------- ------ + 
 | Division | Tool_No | Tool_name | 
 + ---------- + --------- + -------------- + 
 | réseau | 1 | Sertisseuse | 
 | réseau | 2 | LAN testeur | [. .____] | réseau | 3 | Sleaver | 
 | matériel | 1 | Vis DRV | [. .____] | matériel | 2 | Testeur d'alimentation | [. .____] | matériel | 3 | Plyer | [. .____] [. .____] + ---------- + --------- + -------------- + 3 rows in set (0.00 sec) 
 
 mysql> SELECT * de employee_tools; [. .____] + ------ + ------------- - + 
 | Id | Outil | [. .____] + ------ + -------------- + 
 | 1 | 1_Crimper | [. .____] | 1 | 2_LAN Tester | [. .____] | 1 | 3_Sleaver | [. .____] [. .____] [. .____] + ------ + -------------- + 3 rows in set (0.00 sec)
2
dinesh.mic

Cela devrait faire le tour pour vous:

DELIMITER $$
DROP TRIGGER IF EXISTS `employee_INSERT` $$
CREATE TRIGGER `employee_INSERT` 
AFTER INSERT ON `employee`
FOR EACH ROW
BEGIN
    INSERT INTO employee_tools (Id, Tool)
    SELECT new.Id, tools.Tool_Name 
            FROM tools
            WHERE tools.Division = new.Division;
END $$
DELIMITER ;
3
Gord Thompson