有没有办法将 "UPDATE" 语句合并到 "SELECT" 语句中,或者设置一个 TRIGGER 以自动更新 "UPDATE" 语句?

Is there a way to incorporate an "UPDATE" statement inside a "SELECT" statement or SET a TRIGGER to Auto update an "UPDATE" statement?

我在 ls_customer table 中添加了一个新列 response_category。然后我给它设置了一个更新代码。

添加语句:

ALTER TABLE ls_customer
ADD response_category VARCHAR(255)

更新声明:

UPDATE ls_customer SET response_category = 'Hot Lead' WHERE flag = 3
UPDATE ls_customer SET response_category = 'Warm Lead' WHERE flag = 2

如何将上述“UPDATE”语句设置为在我们的内部 CRM 工具中的标志发生变化时自动更新?

然后我使用 SELECT 语句来呈现此数据。问题是这个“SELECT”语句链接到我的 Tableau 分析。每次我刷新 Tableau 时,如果标志有任何变化,响应类别不会在最终的 SELECT 语句中更新,直到我手动打开 MySQL 和 运行 上面的“UPDATE”再次查询

SELECT语句如下:

SELECT
cell_phone,full_name,company_name,DATE(date_join),
response_type,response_category,ls_customer.tags AS lead_type,ls_lead_stats_raw_data.last_update,date_join,source 
FROM ls_lead_stats_raw_data
INNER JOIN ls_customer
ON ls_lead_stats_raw_data.client_id = ls_customer.customer_id
INNER JOIN ls_company
ON ls_company.company_id = ls_customer.company_id

每次更改 CRM 中的标志时,如何自动执行 UPDATE 语句以将 response_category 设置为 'Hot Lead'、'Warm Lead'?

尽管有 mysql 版本号,但您可以通过多种不同的方法解决此问题,例如:

  1. 根据标记列内容在 table 更新 response_category 列上创建更新前触发器。但是,也许您的 CRM 已经在使用触发器并且不允许您向它们添加任何代码

  2. 创建每分钟执行的数据库事件并更新 response_category 列。此解决方案不是最有效的,因为它会执行事件,即使标志列中没有任何更改。

  3. 您可以使用标志和 response_category 列创建引用 table。它的内容是:

flag response_category
2 warm lead
3 hot lead

您将这个新 table 添加到 ref_table.flag = ls_customer.flag 到您的 select(将 response_category 替换为 ref_table.response_category) .但这个解决方案非常明显,我认为你没有使用它是有充分理由的。

所以最后我建议为 response_category 使用生成列而不是常规列:

ALTER TABLE ls_customer

ADD COLUMN response_category VARCHAR(255) GENERATED ALWAYS 

AS (CASE flag WHEN 2 THEN 'Hot lead' WHEN 3 THEN 'Warm lead' END) 

STORED ;

使用 STORED 选项将允许您在此列上添加索引,以防您需要提高 SELECT 性能。

希望这会有所帮助。