基于select query mysql更新和删除查询
如何在mysql中的单次查询中解决这个问题 首先从表中选择status和instituteId:基于select query mysql更新和删除查询,mysql,Mysql,如何在mysql中的单次查询中解决这个问题 首先从表中选择status和instituteId: select instituteId, status from reviews where reviewId='10'. 如果状态为1,则希望从表中更新和删除,如 update institutions SET institutions.overallRatings=(SELECT avg(b.averageRating) FROM reviews a INNER JOIN revi
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'
此过程应满足您的要求。它将所需的
reviewId
作为参数(rid
)。首先,它将instituteId
和status
选择为两个变量iid
和sts
。然后,如果sts=1
,则执行更新。最后,它删除了相应的审阅。注意,它使用变量iid
来避免更新中的第二个子查询
DELIMITER //
CREATE PROCEDURE update_institution(IN rid VARCHAR(10))
BEGIN
DECLARE iid, sts INT;
SELECT instituteId, status INTO iid, sts FROM reviews WHERE reviewId=rid;
IF sts = 1 THEN
UPDATE institutions
SET institutions.overallRatings=(SELECT AVG(b.averageRating)
FROM reviews a
INNER JOIN reviews b
ON b.instituteId=a.instituteId
WHERE a.reviewId=rid AND b.status=1)
WHERE institutions.instituteId=iid;
END IF;
DELETE FROM reviews WHERE reviewId=rid;
END //
DELIMITER ;
CALL update_institution('10');
请注意,此过程假定reviews.status
的唯一有效值为0和1。如果没有,则需要在删除
周围放置If
:
IF sts = 0 OR sts = 1 THEN
DELETE FROM reviews WHERE reviewId=rid;
END IF;
根据您的问题,它还假设reviewId
是VARCHAR
。如果不是这种情况,则需要适当调整参数类型(可能为INT
)
最后,我真的不明白为什么在更新
中的子查询中有一个连接
,它所做的事情完全没有必要。您可以将其改写为:
SELECT AVG(averageRating)
FROM reviews
WHERE reviewId=rid AND b.status=1
好吧,那还不是最后一次。要使此功能正常工作,必须仅对给定的reviewId
进行一次审阅。因此,取平均值(使用AVG
)是没有意义的,UPDATE
子查询可以进一步简化为:
SELECT averageRating
FROM reviews
WHERE reviewId=rid AND b.status=1
不能在单个语句中更新和删除。您可以考虑一个过程。或者可以使用MySQL函数/过程来进行查询?然后如何创建这个查询的过程?这不能解决您的问题吗?如果没有,你能提供更多的信息来帮助解决这个问题吗?