有没有办法将 "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 版本号,但您可以通过多种不同的方法解决此问题,例如:
根据标记列内容在 table 更新 response_category 列上创建更新前触发器。但是,也许您的 CRM 已经在使用触发器并且不允许您向它们添加任何代码
创建每分钟执行的数据库事件并更新 response_category 列。此解决方案不是最有效的,因为它会执行事件,即使标志列中没有任何更改。
您可以使用标志和 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 性能。
希望这会有所帮助。
我在 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 版本号,但您可以通过多种不同的方法解决此问题,例如:
根据标记列内容在 table 更新 response_category 列上创建更新前触发器。但是,也许您的 CRM 已经在使用触发器并且不允许您向它们添加任何代码
创建每分钟执行的数据库事件并更新 response_category 列。此解决方案不是最有效的,因为它会执行事件,即使标志列中没有任何更改。
您可以使用标志和 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 性能。
希望这会有所帮助。