sql - 如何加入不同的 CONCAT 表达式?
问题描述
我正在尝试根据CONCAT
包含不同文本条件的表达式连接表。
我尝试了一种效率低下的方法,查询时间太长。
SELECT
sf.displayId,
-- tw.displayText,
CASE
WHEN tw.DisplayText IN ('N/A', 'NotApplicable', 'Not Applicable')
THEN 'Not Applicable'
ELSE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(tw.DisplayText,'client','Client'),'approved','Approved'),'rejected','Rejected'),'review','Review'),'Requirement','Requirement'),'open','Open'),'submitted','Submitted'),'complete','Complete'),'incomplete','Incomplete'),'pending','Pending'),'resubmit','Resubmit'),'Awaiting review','Awaiting Review')
END AS AuditStatus
FROM Connect.Data.supplier_form sf
JOIN Connect.Data.translation tw
ON ((CONCAT('workflowStepName' , sf.workflowStatusId) = tw.translationField) OR (CONCAT('workflowStepMessage' , sf.workflowStatusId) = tw.translationField))
AND tw.language = 'en'
WHERE sf.deleted = 0
AND tw.displayText IN ('Awaiting Review','Awaiting review')
ORDER BY sf.displayId
OFFSET 0 ROWS
FETCH NEXT 100 ROWS ONLY;
我想以一种更有效Connect.Data.supplier_form sf
的方式基于表达式加入。CONCAT
解决方案
我不确定 SQL 优化器在 SQL Server 中有多好,因此您可以尝试翻转连接条件的顺序以更容易使用索引。我会做两件事:
我会将
JOIN
条件更改为:JOIN Connect.Data.translation tw ON tw.language = 'en' AND tw.translationField in ( CONCAT('workflowStepName' , sf.workflowStatusId), CONCAT('workflowStepMessage' , sf.workflowStatusId) )
我会添加索引:
create index ix1 on Connect.Data.translation(language, translationField);
试一试,让我们知道它是否能提高性能。
推荐阅读
- machine-learning - 随机森林火车/测试意义
- javascript - 为什么函数将 2Darray 参数重新分配为调用后者的副作用
- c# - 有没有办法在 Windows 中获取 WAN 微型端口统计信息?
- c++ - 引用折叠的函数模板重载
- r - 定位字符串中第 N 个字符后的第一个空格
- c# - 分层的“OneTimeSetUp”方法
- r - R Keras 错误:该层的所有输入都应该是张量
- laravel - LARAVEL : SoftDelete all childs and their childs On SoftDelete a parent
- php - 使用 PHPMailer 和 gmail 在 Heroku 上发送电子邮件
- javascript - 从手机上传文件到 dropzone 时,只处理一个文件