【问题标题】:Reference table name column in another table in join - SQL Server在连接中引用另一个表中的表名列 - SQL Server
【发布时间】:2019-01-08 09:02:28
【问题描述】:

我有以下情况:

表 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                        值

tblDEF
tblPrimaryKeyId    col2
101                       值

我需要在加入时得到下面的列
选择 Table-1.col1,
表 2.col2,
[ tblABC.col2 OR tblDEF.col2 等取决于表]
来自表 1
INNER JOIN(在这里加入)

我想得到
表 1 中的 col1,
表 2 中的 col2,其中表 1 的 col2 与表 2 的 col1 匹配,
col2 from (TABLES IN COL2 of Table-2 where col3 of Table-2 与 col-2 [Different tables] 中的那些表中的列匹配)

请帮忙。

【问题讨论】:

  • 您能否将其发布为格式化文本而不是所有 HTML 标签并解释您的最终结果应该是什么?
  • 嗨,我不知道如何格式化文本。您可以找到我要查找的附件图片。谢谢。
  • 欢迎来到 Stack Overflow。您的问题没有包含足够有用的详细信息,我们无法为您提供帮助。请花点时间阅读这两个链接,如果您仍在寻求帮助,请考虑编辑您的问题。 stackoverflow.com/help/how-to-ask 和,关于发布图片,meta.stackoverflow.com/a/285557/5790584
  • 我没有清楚明白你在问什么,但这可能会对你有所帮助..stackoverflow.com/questions/10195451/…
  • 抱歉造成混淆,如果有帮助,请查找已编辑的文本。谢谢。

标签: sql-server join dynamic


【解决方案1】:
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;

【讨论】:

  • 谢谢回复,但是tblABC,tblDEF是动态的,不知道Table-2的col2有多少个表名。我需要从所有这些表中获取数据。
  • 我已根据 Table2 中的内容更新了答案以使联接动态化。您可能需要添加DISTINCT 以避免重复连接?
  • 好的。让我试试。谢谢。
  • 嗨,我试过你的方法,我必须做一些调整,但我得到了方向,谢谢你的帮助。
  • 高德来帮忙。如果您认为它是正确的,请接受答案。
猜你喜欢
  • 2021-11-28
  • 2022-08-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2021-12-22
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多