【问题标题】:Cartesian Product in database数据库中的笛卡尔积
【发布时间】:2014-02-25 09:29:25
【问题描述】:

我想创建数据库中单个表的列的笛卡尔乘积。

我有一个表,每列有 3 列和 3 个值,然后我希望在表的列中得到 27 行笛卡尔积。

获得此结果的最佳方法是什么,或者我应该使用任何数据结构来生成我的输出?

【问题讨论】:

    标签: sql-server-2008-r2 cartesian-product


    【解决方案1】:

    创建笛卡尔积很简单。

    select 1 as one,2 as two,3 as three
    into #test
    union all select 4,5,6
    union all select 7,8,9
    
    select t1.*
    from
      #test t1,
      #test t2,
      #test t3
    
    drop table #test
    

    这会将test(t1 的实例)中的每条记录自行连接到test(t2 的实例)中的所有其他记录。

    如果您想创建一个新表,只需将select t1.* 更改为select t1.* into myTableName,它们就会填充该表。

    编辑: 根据你的问题,我相信我的回答会给你你想要的。但是,您可能想要pivot 您的数据。

    【讨论】:

    • 感谢您的帮助....但是还有另一种情况,因为我在运行时在数据库中创建表,并且表中的插入也在运行时完成...所以数字列数不固定。那么解决这个问题的方法是什么。
    • @Neeraj_Yadav 如果是这样,为什么不以不同的方式创建表?摆脱这种糟糕的数据库设计,做一些更易于维护的事情。
    • 发布一些示例输入以及您想要的结果。
    • 例如,我有一个包含三列(操作系统、浏览器、处理器)的 csv 文件,每列中的值可能会有所不同。现在所有这些工作都在执行时输入。导入 CSV 文件,然后在数据库中创建表,在表中插入值。所以我必须开发逻辑,以便它可以适用于任何 csv 文件,这些文件将在未来以“n”个列和行数导入并创建笛卡尔积。必须使用数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多