ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 9870|回复: 6

[讨论] SQL中left join结合组合键创建的唯一ID消除笛卡尔积

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-12-28 21:06 | 显示全部楼层 |阅读模式
两个附件均来自本版。见附件。
toushibiao中的SQL语句为(原帖http://club.excelhome.net/viewthread.php?tid=518957&pid=3419815&page=1&extra=page%3D1):
  1. select
  2. a.*,
  3. b.單價,
  4. b.單價*a.數量 as 工资
  5. from
  6. (
  7. select
  8. *,
  9. 產品&工序 as ID
  10. from
  11. [數據$]
  12. )a
  13. left join
  14. (
  15. select
  16. *,
  17. 產品&工序 as ID
  18. from
  19. [單價$]
  20. )b
  21. on a.ID=b.ID
复制代码
毛利率问题中的SQL语句为(原帖http://club.excelhome.net/thread-517606-1-1.html
  1. select
  2. a.*,
  3. a.销售数量*b.进货均价 as 销售成本
  4. from
  5. (
  6. select
  7. *,
  8. 供货商&产品型号 as Out_ID
  9. from
  10. [销售$]
  11. )a
  12. left Join
  13. (
  14. select
  15. In_ID,
  16. sum(进货金额)/sum(进货数量) as 进货均价
  17. from
  18. (
  19. select *,
  20. 供货商&产品型号 as In_ID
  21. from
  22. [进货$]
  23. )
  24. group by In_ID
  25. )b
  26. on
  27. a.Out_ID=b.In_ID
复制代码
toushibiao.rar (9.47 KB, 下载次数: 47)
毛利率问题.rar (17.19 KB, 下载次数: 41)

正确的toushibiao附件: toushibiao.rar (11.37 KB, 下载次数: 76)

[ 本帖最后由 masterexcel 于 2009-12-28 21:55 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-12-28 21:31 | 显示全部楼层
不懂SQL和ADO,但知道是个好东西,我也在学习ACC,想在EXCEL里做出好的东西。向你学习。

TA的精华主题

TA的得分主题

发表于 2009-12-28 21:44 | 显示全部楼层
我不同意楼主的标题
消除笛卡尔乘积最根本的原因不是在于连接,而是在于唯一ID,就像学号,一个学生就只有一个学号,学号就是这个学生的唯一标识码。
左连接只是以左边的表为基准,左边的ID和右边ID都是唯一,就不会产生笛卡尔现象,如果右边有两个ID对应左边一个ID,就算你是左连接,一样会产生1对多的现象

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-28 21:54 | 显示全部楼层
原帖由 虎中之王 于 2009-12-28 21:44 发表
我不同意楼主的标题
消除笛卡尔乘积最根本的原因不是在于连接,而是在于唯一ID,就像学号,一个学生就只有一个学号,学号就是这个学生的唯一标识码。
左连接只是以左边的表为基准,左边的ID和右边ID都是唯一,就不 ...


多谢回复!

在附件中有明确的说明。

TA的精华主题

TA的得分主题

发表于 2009-12-28 21:58 | 显示全部楼层

我说话比较直接,希望楼上不要见怪。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-12-29 08:16 | 显示全部楼层
原帖由 虎中之王 于 2009-12-28 21:58 发表

我说话比较直接,希望楼上不要见怪。


哪里哪里,大家都是交流学习。指出问题才有可能进步。就笛卡尔积本身而言,对于两个集合,它终究是存在的。这两个例子中的方法,也是创建唯一ID(组合键),并在SQL中进行处理得到相应的结果,并没有真正的消除笛卡尔积。标题的确有失严谨,感谢!:)

TA的精华主题

TA的得分主题

发表于 2011-4-15 21:52 | 显示全部楼层
请教断轮回,產品&工序,a表也还是有2个301010301010-001,左连接不还是多对一吗,这跟单独用工序字段左连接有什么区别啊,请指点一下好吗,谢谢

[ 本帖最后由 blzyj 于 2011-4-15 21:58 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 07:10 , Processed in 0.042435 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表