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

有两个表A,B,两个表示多对多的关系,所以还有一个关系表C,为了简化说明,A的字段有ID和TAG、TIME,B的字段有ID和TAG,C的字段有ID、AID、BID。其中I... 有两个表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。
在线等。谢谢!
展开
 我来答
IM_FB
推荐于2021-02-11 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:115
采纳率:100%
帮助的人:67.1万
展开全部
楼主这个级联更新我才疏学浅给分为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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式