关于多对多关系表做一个级联更新的问题(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。
在线等。谢谢! 展开
现在有一个需求,要对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。
在线等。谢谢! 展开
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
--更新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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |