首页 > 解决方案 > 在连接中引用另一个表中的表名列 - SQL Server

问题描述

我有以下情况:

表 1
col1 col2 col3
1 40 100(tblABC 的标识列值)
2 41 101(tblDEF 的标识列值)

表 2
col1 col2 col3
40 tblABC tblABCPrimaryKey
41 tblDEF tblDEFPrimaryKey

========= 不同的表 ===============
tblABC
tblPrimaryKeyId col2
100 VALUE

tblDEF
tblPrimaryKeyId col2
101 值

我需要 从 Table-1 INNER JOIN中
         选择 Table-1.col1、
                   Table-2.col2、
                   [ tblABC.col2 OR tblDEF.col2 等等,具体取决于表]

我想
从表 1 中获取 col1,
从表 2 中获取 col2,其中表 1 的 col2 与表 2 的 col1 匹配,
从(表 2 的 COL2 中的表中的表,其中表 2 中的 col3 与这些表中的列匹配) col-2 [不同的表])

请帮忙。

标签: sql-serverjoindynamic

解决方案


DECLARE @sql NVARCHAR(MAX) = '
SELECT Table1.col1
    , Table2.col2,
    , COALESCE(';

SELECT
    @sql = @sql + #Table2.col2 + '.col2, '
FROM #Table2;

SET @sql = @sql + ' NULL)
INNER JOIN Table2
    ON Table1.col2 = Table2.col1';

SELECT
    @sql = @sql + '
LEFT JOIN ' + col2 + ' 
    ON Table2.col2 = ''' + col2 + ''' 
    AND Table1.col3 = ' + col2 + '.col1'
FROM #Table2

EXEC sys.sp_executesql @sql;

推荐阅读