关于多对多关系表做一个级联更新的问题(MYSQL),求高手解答SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于多对多关系表做一个级联更新的问题(MYSQL),求高手解答SQL语句相关的知识,希望对你有一定的参考价值。

有两个表A,B,两个表示多对多的关系,所以还有一个关系表C,为了简化说明,A的字段有ID和TAG、TIME,B的字段有ID和TAG,C的字段有ID、AID、BID。其中ID都为各表主键,AID和BID分别对应A、B表的外键。
现在有一个需求,要对A表中存在的TIME小于某个特定的值(可以认为是固定的),则置该记录的TAG为1(默认为0,B表也一样),而作为级联,与该记录相关的B表中的记录的TAG也需要置1,但是考虑到多对多的关系,B表的该记录可能存在于A表另一个ID有关联,但是该记录的TIME大于该特定值,此时不将B表的该记录的TAG置1,仍然保留0。
现在就是要设计这样的一个UPDATE语句,更新A表很简单,关键是如何级联更新B表,但又要满足上述条件(只有与B记录所有关联的A记录的TAG为0才置B的TAG为0),数据库是mysql
在线等。谢谢!

参考技术A 楼主这个级联更新我才疏学浅给分为2步骤, 先更新A表。 在更新B表,一条语句更新2张表的写法我目前写不来。下面是我的sql 你看是否与你的要求一致。

--更新A表update A set A.tag=0 from A INNER JOIN ( --获取 多对多关系C表 并根据A表时间来获得需要更新的A表ID 和B表ID select c.Aid,c.Bid from C INNER JOIN A ON A.id = c.Aid INNER JOIN B ON B.id =c.Bid where A.Time<getDate() --根据某时间条件。 AND A.Tag =0 --A的Tag 为0 时 ) result
ON resule.Aid=A.ID

--更新B表update B set B.tag=0 from B INNER JOIN ( --获取 多对多关系C表 并根据A表时间来获得需要更新的A表ID 和B表ID select c.Aid,c.Bid from C INNER JOIN A ON A.id = c.Aid INNER JOIN B ON B.id =c.Bid where A.Time<getDate() --根据某时间条件。 AND A.Tag =0 --A的Tag 为0 时 ) result
ON resule.Bid=B.ID

以上是关于关于多对多关系表做一个级联更新的问题(MYSQL),求高手解答SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

休眠 - 多对多关系中的级联删除

具有多对多关系的级联删除[重复]

定义多对多关系的代码第一种方法导致关于“循环或多个级联路径”的mssql错误

关联映射 ---- Hibernate之多对多关系

同一张表之间多对多的级联删除

2018.11.4 Hibernate中多对多的关系