以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- sql inner join的疑问 (http://foxtable.net/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 -- 谢谢,那我就按那样来设计了。 |