【问题标题】:Cartesian product of- records of a single column on single table笛卡尔积 - 单个表上单个列的记录
【发布时间】:2013-10-29 22:54:05
【问题描述】:

您好,我想知道是否可以进行“笛卡尔积”运算 在列记录上。这是场景:

PIID1           PIID2

PIID11         (Intially empty)
PIID12         (Initially empty)
PIID13         (Initially empty)

需要的输出(删除自我关系):

PIID1             PIID2  
-------- --------------------  
PIID11           PPIID12  
PIID11           PPIID13  
PPIID12          PIID11  
PPIID12          PPIID13  
PPIID13          PPIID12  
PPIID13          PPIID11  

请发布您的解决方案。

【问题讨论】:

  • 您的结果是SELECT 还是要更新表(并添加行)?
  • 您需要所有标记为 DBS 的解决方案吗?
  • @ypercube :我想让它像一个使用查询的动态表更新
  • @DanFromGermany:我不敢这么说,但我没有得到你的问题。请你告诉我“什么是 dbs ?”

标签: mysql sql sql-server sql-server-2008 oracle11g


【解决方案1】:

试试SELF JOIN:

Select 

    a.pIID1 as PIID1, 
    b.pIID1 as PIID2
    from 
    table a, 
    (Select pIID1 from table) b
    WHERE  a.pIID1<>b.PIID1

【讨论】:

  • 我看到了一个连接,但没有看到 JOIN
【解决方案2】:

首先使用自连接插入新行:

INSERT INTO tableX
    (piid1, piid2)
SELECT
    a.piid1, b.piid1
FROM 
    tableX  a
  CROSS JOIN
    tableX  b
WHERE
    a.piid1 <> b.piid1 ;

然后删除原来的行:

DELETE FROM tableX
WHERE piid2 IS NULL ;

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 2012-01-03
    • 2020-10-06
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多