我有三個表(餐廳 - 票 - 評論)。我想創建一個觸發器,讓我更新餐館中的兩個字段(restaurant_rate_average,restaurant_comment_count)。這裏是我的觸發器:MariaDB - 更新後的複雜觸發查詢
DELIMITER $$
CREATE
TRIGGER `change comment status` AFTER UPDATE ON `comments`
FOR EACH ROW
BEGIN
UPDATE restaurants
INNER JOIN votes ON restaurants.restaurant_id = votes.vote_foreign_key
SET restaurants.restaurant_comment_count = SELECT (COUNT(votes.vote_id))
WHERE votes.vote_model = 'restaurant'
AND WHERE old.comment_status<>NEW.comment_status;
UPDATE restaurants
INNER JOIN votes ON restaurants.restaurant_id = votes.vote_foreign_key
SET restaurants.restaurant_rate_average = SELECT (AVG(votes.vote_num))
WHERE votes.vote_model = 'restaurant'
AND WHERE old.comment_status<>NEW.comment_status;
END;
$$
DELIMITER ;
其實我有一個錯誤:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT (COUNT(votes.vote_id))
WHERE votes.vote_model = 'restaurant'
' at line 8
我試圖讓膚色更小,並用2替換SELECT(COUNT(votes.vote_id)),我得到新錯誤:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE comments.comment_status<>NEW.comment_status;
UPDATE resta' at line 9
如何解決?
編輯:
這裏是我的僞表:
餐館: restaurant_id,restaurant_comment_count(INT),restaurant_rate_average(INT)
評論: COMMENT_ID,comment_status (布爾),comment_content(varchar),votes_vote_id(id)
票: vote_id,vote_foreign_key(ID),vote_model(VARCHAR)
EDITED 2:
我創造新的簡單的觸發器,它剛剛加入三個表和它的作品般的魅力:
BEGIN
UPDATE restaurants res
INNER JOIN votes v ON v.vote_foreign_key = res.restaurant_id AND v.vote_foreign_key = 'restaurant'
INNER JOIN comments cm ON cm.votes_vote_id = v.vote_id
SET res.restaurant_rate_average = 2
WHERE cm.comment_status = NEW.comment_status;
END
但是,如果我更換SET res.restaurant_rate_average = 2與SELECT AVG(v.vote_id)我得到了一個錯誤。我也最後觸發編輯於:
我在第4行得到一個錯誤我想要的是取代靜態數量與SELECT AVG(votes.vote_num)
請發表您的表 – e4c5
你'WHERE'條款不有道理。它們指的是屬於「comments」表的'comment_status'列,但這個表不是連接的一部分。 –
@ e4c5我更新了我的問題 – AFN