mysql触发一对多关系

标签 mysql triggers

所以我有3个表Production、Stop_Prodcution和triggered_table。 生产与 Stop_prodcution 具有一对多的关系,其中一个生产可以有很多停止生产。

 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_product 中新插入的行不同的信息,请告诉我我是否解释过自己,如果没有,我会尽力说得更清楚。

最佳答案

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

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;

关于mysql触发一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55271524/

相关文章:

postgresql - 使用自动分区创建在 PostgreSQL 11 中进行表分区?

java - Java远程连接MySQL数据库

sql - 在 MySQL 中使用外键时出现问题

postgresql - 何时使用 = 和 := in postgreSQL?

mysql - MySql中如何使用触发器制作外键

javascript - VBA IE导航触发Javascript

php - 将站点转换为 Drupal——噩梦开始了

mysql - Wampserver 登录失败 mysql windows 7

php - 逐渐更新每一行的日期列加一天

sql - 触发器函数(INSTEAD OF DELETE ON View )无法从查询 [POSTGRESQL] 中选取值