首页 运维 正文
SQL的笛卡尔积

 2022-10-23    311  

什么是笛卡尔积?

笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join)。所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。

SQL的笛卡尔积

参见下面的示例:

DECLARE@TempTABLE
(GroupIDINT, 
GroupNameVARCHAR(25), 
ItemNumbervarchar(25) 
) 
INSERTINTO@Temp
SELECT1,'5805','27-196-018'
UNION
SELECT1,'5805','27-196-019'
UNION
SELECT2,'5805','27-196-020'
UNION
SELECT2,'5805','27-196-021'
UNION
SELECT3,'5805','27-196-022'
UNION
SELECT3,'5805','27-196-023'

SELECT 
G1_GroupID 
,G1_ItemNumber 
,G2_GroupID 
,G2_ItemNumber 
FROM( 
SELECT 
GroupIDASG1_GroupID 
,ItemNumberASG1_ItemNumber 
FROM@Temp 
WHERE 
GroupIDIN(1) 
)ASACROSSJOIN( 
SELECT 
GroupIDASG2_GroupID 
,ItemNumberASG2_ItemNumber 
FROM@Temp 
WHERE 
GroupIDNOTIN(1) 
)ASB 
ORDERBYA.G1_GroupID,A.G1_ItemNumber 
/*Result 
*127-196-018227-196-020 
*127-196-018227-196-021 
*127-196-018327-196-022 
*127-196-018327-196-023 
*127-196-019227-196-020 
*127-196-019227-196-021 
*127-196-019327-196-022 
*127-196-019327-196-023 
*/ 

原文链接:https://77isp.com/post/6892.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。