在mysql中如何在单次查询时解决这个问题
首先从表中选择状态和机构ID:
select instituteId, status from reviews where reviewId='10'.
如果状态为1,则希望从表中更新和删除,例如,
update institutions SET institutions.overallRatings=(SELECT
avg(b.averageRating) FROM reviews a INNER JOIN reviews b ON
b.instituteId=a.instituteId WHERE a.reviewId='10' AND b.status='1') WHERE
institutions.instituteId=(SELECT instituteId FROM reviews WHERE
reviewId='10')
假设状态为0,则仅删除,
DELETE FROM reviews WHERE reviewId='10'
1条答案
按热度按时间q8l4jmvw1#
这个过程应该符合你的要求。它需要你想要的
reviewId
作为参数(rid
). 首先它选择instituteId
以及status
变成两个变量iid
以及sts
. 那么如果sts=1
它执行更新。最后删除相应的评论。注意,它使用变量iid
避免在UPDATE
.请注意,此过程假定
reviews.status
是0和1。如果不是的话,你就需要IF
周围DELETE
:根据你的问题,它还假设
reviewId
是一个VARCHAR
. 如果不是这样,则需要适当地调整参数类型(可能是INT
).最后我真的不明白你为什么要
JOIN
在子查询中UPDATE
,它所做的事情完全没有必要。你可以重写为:好吧,还没到最后。要使这一点起作用,必须只有一个给定的审查
reviewId
. 所以取平均值(使用AVG
)毫无意义UPDATE
子查询可以进一步简化为: