Foxtable(狐表)用户栏目专家坐堂 → sql inner join的疑问


  共有2431人关注过本帖树形打印复制链接

主题:sql inner join的疑问

帅哥哟,离线,有人找我吗?
HappyFt
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1905 积分:16927 威望:0 精华:0 注册:2014/7/29 19:09:00
sql inner join的疑问  发帖心情 Post By:2014/12/10 21:49:00 [只看该作者]

生产单是主表,生产明细,物料明细都是生产单的子表,两者都是通过生产单号与生产单关联,

现在要加载生产单,但条件可能在三个表中或其中的一个表中,所以必须将三个表连接起来,如果用inner join的话:

select * from 生产单 where 生产单号 in (select distinct 生产单号 from (生产单 a inner joint 生产明细 b on a.生产单号 = b.生产单号) inner join 物料明细 c on a.生产单号 = c.生产单号)where (a.X = xx or b.xx = x等))

 

因为生产明细和物料明细中的生产单号都有重复的,这样联合后数据量是否很大,效率很低?有没有其他的连接方式,主要就是where 条件可能会从生产明细或物料明细中取值才需要联合的。

第二个问题,in后面如果生产单号很多,sql有没有限制不能大于多少之类的?

 

谢谢!

[此贴子已经被作者于2014-12-10 21:50:23编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/10 21:56:00 [只看该作者]

 为什么要这样?

 

 直接 select * from 生产单 where 生产单号 in (子表1) or 生产单号 in (子表2)


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1905 积分:16927 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2014/12/10 22:21:00 [只看该作者]

以下是引用有点甜在2014-12-10 21:56:00的发言:

 为什么要这样?

 

 直接 select * from 生产单 where 生产单号 in (子表1) or 生产单号 in (子表2)

这种方式会比将一个窗口中的几个表查询在一起来判断更高吗?主要是设计一个通用的加载条件筛选窗口用

[此贴子已经被作者于2014-12-10 22:37:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/10 22:23:00 [只看该作者]

 回复3楼,就是2楼那样做。

 

 思路都是这样:在子表查出关联列,然后设置主表的条件


 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1905 积分:16927 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2014/12/10 22:26:00 [只看该作者]

谢谢,那我就按那样来设计了。


 回到顶部