笛卡尔积 - 单表上单列的记录

时间:2013-10-21 12:35:03

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

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

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  

请发布您的解决方案。

2 个答案:

答案 0 :(得分:1)

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

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 ;

答案 1 :(得分:0)

尝试SELF JOIN

Select 

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