虽然开始的例子很糟糕,但随着您发布更多问题,您会及时到达那里。拥有更真实的数据(良好的开端)并显示预期输出也是一件好事,而不是基于评论。
无论如何,我不知道有多少“udf”(推断是用户定义的字段),我会在每列上都有一个索引。我正在运行从Table1(别名t1)开始的查询,并根据table1中的值根据每个相应的“udf”列多次加入table2 ...此外,每个左连接也将'value1'应用为这就是你要找的。'value1' 可能存在于任何可能的 table2 别名连接中。
WHERE 子句特定于您要查找的“名称”,UDF1 和 2 表的以下 AND NOT(为 null / 为 null )意味着我只希望在任一别名实例具有匹配...如果没有,忽略记录。
最后,通过COALESCE()的字段选择,我知道两个viaUDF别名中的一个会匹配,所以先通过UDF1抓取Column1 ...如果为null,则从viaUDF2抓取Column1
SELECT
coalesce( viaUDF1.Column1, viaUDF2.Column1 ) as ReturnedKey
from
Table1 T1
left join Table2 viaUDF1
ON T1.Column1 = viaUDF1.udf1
AND viaUDF1.udf1 = 'value1'
left join Table2 viaUDF2
ON T1.Column1 = viaUDF2.udf2
AND viaUDF2.udf2 = 'value1'
where
T1.Column1Name = 'Name1'
AND NOT ( viaUDF1.udf1 IS NULL
OR viaUDF2.udf2 IS NULL )
现在,如果您有 10 个以上的 UDF 列,那么所有的赌注都是为了性能,您必须以类似的方式左连接到每个实例,因为您不能内联连接到基于查询的表(我见过),而无需通过 Dynamic-SQL 进行。