mysql触发一对多关系

时间:2019-03-20 23:19:00

标签: mysql triggers

所以我有3个表Production,Stop_Prodcution和Triggered_table。 生产具有Stop_prodcution的一对多实现,其中生产可以具有许多Stop生产。

 production table 
-----------------------
  id_prod |   date
-----------------------
    1     |20/03/2019
    2     |18/04/2019

 Stop_Production table
  ----------------------------
 id_stop |    name    | id_prod
  ----------------------------
    1    | Any reason |    1
    2    |   Lunch    |    1
    3    |damaged prod|    2

 triggered_table
 ----------------------------
 id|id_prod|date|id_stop|name

我创建了2个触发器:

after insert into production         
for each row         
insert into triggered_table        
(id_prod,date) values (new.id_prod, curdate()) 

和另一个:

after update     
set id_stop=new.id_stop, 
name= new.name     
where id_prod= new.id_prod

问题是生产记录可以具有2个或更多stop_Production记录,因此使用我拥有的触发器,它将始终更新同一记录,但是我需要的是一条具有生产表信息和该信息与stop_production中新插入的行不同,请告诉我是否解释了我的自我,否则我会尝试更加清楚。

1 个答案:

答案 0 :(得分:0)

此查询将为您提供所需的结果,而无需使用触发器:

SELECT 
t1.id_stop,
t1.id_prod,
t1.`name`,
t2.date
FROM stop_production
LEFT JOIN production
ON (t1.id_prod = t2.id);

如果要以此创建“表格”,则可以创建view

CREATE VIEW triggered_table AS (
    SELECT 
    t1.id_stop,
    t1.id_prod,
    t1.`name`,
    t2.date
    FROM stop_production
    LEFT JOIN production
    ON (t1.id_prod = t2.id)
)

然后,如果您想从此“表”中SELECT,则只需:

SELECT * FROM triggered_table;