以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  sql inner join的疑问  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=61323)

--  作者:HappyFt
--  发布时间:2014/12/10 21:49:00
--  sql inner join的疑问

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

现在要加载生产单,但条件可能在三个表中或其中的一个表中,所以必须将三个表连接起来,如果用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编辑过]

--  作者:有点甜
--  发布时间:2014/12/10 21:56:00
--  

 为什么要这样?

 

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


--  作者:HappyFt
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间:2014/12/10 22:23:00
--  

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

 

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


--  作者:HappyFt
--  发布时间:2014/12/10 22:26:00
--  

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