昨天写了篇多表连接查询
那么今天就写交叉连接查询
如下图所示

这是一份采购列表,AB列为采购数量 DE列为采购单价
其中,在单价表中角钢以及三脚架出现了两种不同的单价

代码如下
strSQL = "Select a.*,单价 From " & strSource & "a," & strSource1 & "b Where a.名称=b.名称 Order By a.名称"
在上述代码运行中,例如采购列表中角钢出现了3次,而单价列表中角钢的单价出现了2次,进行了多表连接后,角钢的记录出现了6条,既3*2=6,这显示了所有可能的组合和排列,也就是多对多的关系,而这种关系现象称之为笛卡尔积现象
笛卡尔积,也就是列出了连接表之间行的所有可能组合
在SQL中,我们都尽量避免出现笛卡尔积的出现,假设,角钢是1000行,而单价表也是1000行,也就是1000*1000...从而会导致结果表容易变得异常庞大,想想,如果数据在大一点呢
当然,也有用到笛卡尔积的时候,比如说,需要列出所有的组合排列
再来,如下图所示

假设,需要对1-9排列出3个数为一组的的组合,关于这个问题,小编经常有看到小伙伴在问…
先上动图

strSQL = "select * From " & strSource & "a," & strSource & "b," & strSource & "c Where a.序号<b.序号 and b.序号 < c.序号 Order By a.序号,b.序号,c.序号 "
交叉连接是组合两个表的另一种方式,但是,这种只能用于小型的数据表
该连接会将第一个表的每一行和第二个表的每一行相匹配,产生了所有可能的组合
利用Where子句限制了一定的条件
看到这里,可能小伙伴会有点疑问,这个怎么好像又和那个叫卡卡的一样
嗯,确实是一样的,交叉连接也是称之为笛卡尔积...
在写一个例子,睡觉~
如下图所示

我想生成一组数字,0至30...

strSQL = "select a.数字*10+b.数字 As 序列 From " & strSource & "a," & strSource & "b Where a.数字*10+b.数字<=30 Order By 1"
还是利用了交叉连接,最后使用Order By 排序
示例文件下载
链接:https://pan.baidu.com/s/1-kZsOxdVhZ7MqdLOWU1JHA
提取码:abcd
收工!
如果小伙伴有好的思路,可以在小编的公众号留言发给小编研究下
文章觉得有用,点个赞+在看,你的每一次点赞和转发就是小编原创的动力
关注公众号 ↓
文章转载自Excel VBA练习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




