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;