T-SQL:与所有从属表连接并生成笛卡尔积的查询

时间:2014-10-09 14:52:49

标签: sql-server tsql dynamic-sql

我有一堆表引用了一些其他表(零,一,二或更多)。

我的示例表可能包含以下列:

Id | StatementTable1Id | StatementTable2Id | Value

其中StatementTable1将包含以下列:

Id | Name | Label

我希望得到所有可能的组合并加入所有这些组合。 我发现这个link非常有用(查询产生有关依赖关系的信息)。

我想我的代码如下:

  1. 准备我想查询的表格列表。
  2. 查询所有表格的link并将结果保存到临时表格中。
  3. 检查从属表的最大数量。准备查询模板 - 例如,如果最大数量的从属表等于2:

     Select 
         Id, '%Table1Name%' as Table1Name, 
         '%StatementLabelTable1%' as StatementLabelTable1,
         '%Table2Name%' as  Table2Name, 
         '%StatementLabelTable2%' as StatementLabelTable2, Value"
    
  4. 使用cursor - 为每个依赖表替换相应的部分,其中包含依赖表名和元素标签。

  5. 使用所有相关表时 - 用空字符串替换所有剩余列。
  6. 添加“UNION ALL”并继续下一个表格
  7. 运行查询
  8. 你能告诉我是否有更简单或更好的方式?

1 个答案:

答案 0 :(得分:1)

如果您不提前知道列详细信息,那么您在此处列出的内容听起来就像您需要做的那样。可能会有一些反复试验以确保细节正确,但这是一个很好的计划。

话虽如此,为什么你想要做这样的事情呢?听起来您需要缩小对实际所需数据的要求。否则,当您向数据库添加数据时,此查询和结果数据集将很快变得非常笨拙(这些数据集是您听到的关于每天变成“门禁报告”的类型;没有人使用它们,但它们从不记住它为什么被创建,所以他们继续运行报告,并将其用作门挡。)