我正在尝试从表(a.table)中提取数据以加入另一个表(b.table)。对我来说,我需要加入第三个表(c.table)来引用表Plan_Code和Policy_Riders。请参阅以下代码
USE [CDS]
GO
SELECT riders.ExpiryDt--
,riders.TerminationDt
,[ModalPremium]--
,plan_code
FROM a.table as riders
JOIN c.table as policy
ON policy.Policy_Num = riders.Policy_Num
JOIN b.table AS plan_code
on policy.Plan_Code_ID = plan_code.Plan_Code_ID
WHERE plan_code.Plan_Code LIKE '%EIUL3%'
OR plan_code.Plan_Code LIKE '%LBIUL%'
OR plan_code.Plan_Code LIKE '%MEIUL3%'
GO
对于我从b.table到输出的字段名称Plan_code,我需要先将a.table加入到c.table,然后将c.table加入b.table。我的问题是,是否有更好的方法来处理此查询以更好地在三个表之间进行连接?任何帮助,将不胜感激。谢谢!
答案 0 :(得分:1)
首先,使用派生表作为过滤器:
...
JOIN (SELECT columns
FROM b.table
WHERE Plan_Code LIKE '%EIUL3%'
OR Plan_Code LIKE '%LBIUL%'
OR Plan_Code LIKE '%MEIUL3%'
) AS plan_code ON policy.Plan_Code_ID = plan_code.Plan_Code_ID
这通常会确保将这些过滤器应用于最小的数据集,而不是在所有表连接之后。另一个选择是使上面的临时表,然后加入它。相同的概念,只是帮助优化器有效地工作。在较小的查询中,您将看到没有区别,但在较大的查询中(特别是那些像这样的,使用单个表中的许多过滤器),它将是白天和黑夜。
其次,特别是你的过滤器。使用带有正面和背面通配符LIKE
的{{1}}并不好。它无法使用索引。如果可能,请使用一个%ex%
或另一个ex%
。
除此之外,您的联接很好,并且是从每个表中获取列的正确方法。