SQL的笛卡爾積
作者:翔如菲菲
笛卡爾積在SQL中的實現(xiàn)方式既是交叉連接(Cross Join)。所有連接方式都會先生成臨時笛卡爾積表,笛卡爾積是關(guān)系代數(shù)里的一個概念,表示第一個表的行數(shù)乘以第二個表的行數(shù)等于笛卡爾積結(jié)果集的大小。
什么是笛卡爾積?
笛卡爾積在SQL中的實現(xiàn)方式既是交叉連接(Cross Join)。所有連接方式都會先生成臨時笛卡爾積表,笛卡爾積是關(guān)系代數(shù)里的一個概念,表示第一個表的行數(shù)乘以第二個表的行數(shù)等于笛卡爾積結(jié)果集的大小。
參見下面的示例:
- DECLARE @Temp TABLE
- (GroupID INT ,
- GroupName VARCHAR(25),
- ItemNumber varchar(25)
- )
- INSERT INTO @Temp
- SELECT 1,'5805','27-196-018'
- UNION
- SELECT 1,'5805','27-196-019'
- UNION
- SELECT 2,'5805','27-196-020'
- UNION
- SELECT 2,'5805','27-196-021'
- UNION
- SELECT 3,'5805','27-196-022'
- UNION
- SELECT 3,'5805','27-196-023'
- SELECT
- G1_GroupID
- ,G1_ItemNumber
- ,G2_GroupID
- ,G2_ItemNumber
- FROM (
- SELECT
- GroupID AS G1_GroupID
- ,ItemNumber AS G1_ItemNumber
- FROM @Temp
- WHERE
- GroupID IN(1)
- ) AS A CROSS JOIN (
- SELECT
- GroupID AS G2_GroupID
- ,ItemNumber AS G2_ItemNumber
- FROM @Temp
- WHERE
- GroupID NOT IN(1)
- ) AS B
- ORDER BY A.G1_GroupID,A.G1_ItemNumber
- /*Result
- * 1 27-196-018 2 27-196-020
- * 1 27-196-018 2 27-196-021
- * 1 27-196-018 3 27-196-022
- * 1 27-196-018 3 27-196-023
- * 1 27-196-019 2 27-196-020
- * 1 27-196-019 2 27-196-021
- * 1 27-196-019 3 27-196-022
- * 1 27-196-019 3 27-196-023
- */
原文鏈接:http://www.cnblogs.com/jeriffe/archive/2011/05/19/2051121.html
【編者推薦】
責(zé)任編輯:艾婧
來源:
博客園