MySQL:条件触发
MySQL: Conditional Trigger
是否可以创建一个触发器,使用来自另一个表列的随机值有条件地更新列。
之前我得到了帮助创建一个触发器,该触发器使用另一个表列中的随机值更新列:。我现在正在尝试根据另一列值有条件地进行设置。
如果 users.selection 列 = ‘fruits’ 则随机 select 来自 fruits。
如果 users.selection 列 = ‘animals’,则从动物中随机抽取。
如果‘水果’和‘动物’都不更新。
这是一个 db-fiddle: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=6bc76ed2c104dad0e27dd35b1da112a7
非常感谢@Akina 让我走到这一步!很多东西要学。
更新(5 月 29 日):
我还是想不通。我想也许我首先需要一个带有 IF 语句的 SELECT 到 return selection 列值,但这似乎不起作用。基本上,我使用下面的这些示例作为模板尝试了很多不同的组合。 None 他们似乎拉近了我的距离。
有人有什么想法吗?
示例:
SELECT T1.ID, IFNULL(T1.name, T2.name) AS name
FROM firsttable T1
LEFT JOIN secondtable T2
ON T1.T2_id = T2.id
SET final_price= CASE
WHEN currency=1 THEN 0.81*final_price
ELSE final_price
END
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);
SELECT book_name,isbn_no,
IF((SELECT COUNT(*) FROM book_mast WHERE pub_lang='English')>
(SELECT COUNT(*) FROM book_mast WHERE pub_lang<>'English'),
(CONCAT("Pages: ",no_page)),(CONCAT("Price: ",book_price)))
AS "Page / Price"
FROM book_mast;
我认为你需要有条件地定义什么做什么,如果选择是结果,那么就做一些事情。否则,如果选择的是动物,则做另一件事。
例如:
CREATE TRIGGER trigger_test
BEFORE UPDATE
ON users
FOR EACH ROW
BEGIN
IF (NEW.selection = 'fruits') THEN
SET NEW.random = ( SELECT fruits
FROM list
ORDER BY RAND() LIMIT 1 );
ELSEIF (NEW.selection = 'animals') THEN
SET NEW.random = ( SELECT animals
FROM list
ORDER BY RAND() LIMIT 1 );
END IF;
END;
是否可以创建一个触发器,使用来自另一个表列的随机值有条件地更新列。
之前我得到了帮助创建一个触发器,该触发器使用另一个表列中的随机值更新列:
如果 users.selection 列 = ‘fruits’ 则随机 select 来自 fruits。 如果 users.selection 列 = ‘animals’,则从动物中随机抽取。 如果‘水果’和‘动物’都不更新。
这是一个 db-fiddle: https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=6bc76ed2c104dad0e27dd35b1da112a7
非常感谢@Akina 让我走到这一步!很多东西要学。
更新(5 月 29 日):
我还是想不通。我想也许我首先需要一个带有 IF 语句的 SELECT 到 return selection 列值,但这似乎不起作用。基本上,我使用下面的这些示例作为模板尝试了很多不同的组合。 None 他们似乎拉近了我的距离。
有人有什么想法吗?
示例:
SELECT T1.ID, IFNULL(T1.name, T2.name) AS name
FROM firsttable T1
LEFT JOIN secondtable T2
ON T1.T2_id = T2.id
SET final_price= CASE
WHEN currency=1 THEN 0.81*final_price
ELSE final_price
END
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);
SELECT book_name,isbn_no,
IF((SELECT COUNT(*) FROM book_mast WHERE pub_lang='English')>
(SELECT COUNT(*) FROM book_mast WHERE pub_lang<>'English'),
(CONCAT("Pages: ",no_page)),(CONCAT("Price: ",book_price)))
AS "Page / Price"
FROM book_mast;
我认为你需要有条件地定义什么做什么,如果选择是结果,那么就做一些事情。否则,如果选择的是动物,则做另一件事。
例如:
CREATE TRIGGER trigger_test
BEFORE UPDATE
ON users
FOR EACH ROW
BEGIN
IF (NEW.selection = 'fruits') THEN
SET NEW.random = ( SELECT fruits
FROM list
ORDER BY RAND() LIMIT 1 );
ELSEIF (NEW.selection = 'animals') THEN
SET NEW.random = ( SELECT animals
FROM list
ORDER BY RAND() LIMIT 1 );
END IF;
END;