sql - 在一个模式中找到所有可能的连接?
问题描述
我可以在一个模式中找到所有可能的连接吗?例如达到 2、3 和 4 级。
我可以做这样的事情:
*;with combination as (
select distinct rn = DENSE_RANK() over (order by table_name), table_name from INFORMATION_SCHEMA.TABLES
)
select
combination_no = ROW_NUMBER() Over (Order By NEWID()),
c1.table_name, c2.table_name, c3.table_name, c4.TABLE_NAME
from combination c1, combination c2, combination c3, combination c4
where
c1.rn < c2.rn and
c2.rn < c3.rn and
c3.rn < c4.rn
order by c1.rn, c2.rn, c3.rn, c4.rn
但是,这不是我的意思。我可以只在有连接的地方生成这些结果吗?
解决方案
感谢所有回复。我做了这样的事情:
SELECT obj.name AS FK_NAME,
sch.name AS [schema_name],
tab1.name AS tab,
col1.name AS col,
tab2.name AS [referenced_table],
col2.name AS [referenced_column]
into #temp
FROM sys.foreign_key_columns fkc
INNER JOIN sys.objects obj
ON obj.object_id = fkc.constraint_object_id
INNER JOIN sys.tables tab1
ON tab1.object_id = fkc.parent_object_id
INNER JOIN sys.schemas sch
ON tab1.schema_id = sch.schema_id
INNER JOIN sys.columns col1
ON col1.column_id = parent_column_id AND col1.object_id = tab1.object_id
INNER JOIN sys.tables tab2
ON tab2.object_id = fkc.referenced_object_id
INNER JOIN sys.columns col2
ON col2.column_id = referenced_column_id AND col2.object_id = tab2.object_id
之后我可以使用:
select 'Select top 10 * from '+ tab+ ' join ' + referenced_table +' on ' + col + ' = ' + referenced_table+'.' +referenced_column
from #temp
这给了我与其他表的所有可能连接,这就是我想要的。现在我还在想,当我想要在我的查询中加入 2 和 3 个联接(没有自联接)时,如何接收所有可能的联接。
推荐阅读
- php - Django 截断树枝中的单词
- php - PHPMyAdmin 上传错误“文件太大”
- python - 将函数应用于列表 Python 中的所有项目
- java - 正则表达式提取两个从连字符中分离出来的双数
- python - 对嵌套打印使用中的打印顺序感到困惑
- mysql - 如何将本地托管的 Wordpress 站点迁移到远程主机?
- wordpress - 显示错误 Woocommerce 管理员编辑产品页面
- javascript - 如何使用 Javascript 使用 64382 行 JSON 数据创建图表(如 Excel)。(没有 Chart.js 或其他类似的东西,只有 js、html 或 css)
- sql - 匹配多个名字
- c - 如何让 scanf 函数打印整个数组