几个表数据查询(200)

  • 主题发起人 主题发起人 woodyou
  • 开始时间 开始时间
W

woodyou

Unregistered / Unconfirmed
GUEST, unregistred user!
患者信息表(patients)列名 数据类型 长度 pat_id char 20 instru_myid char 4 chara_myid char 4 workroom_myid char 4 Sex_myID char 2 year_myID char 2 state_myid char 4 项目结果类别信息表(vatypes)列名 数据类型 长度vatype_myid char 4vatype_id char 3vatype_name char 20vatype_rule char 20方法信息表(methods)列名 数据类型 长度method_myid char 4method_id char 4method_name char 20项目信息表(items)列名 数据类型 长度itm_myid char 4itm_id char 4itm_Eng char 20itm_Chan char 20itm_print char 4itm_hl7 char 20itm _dec char 1vatype_myid char 4参考值信息表(ranges)列名 数据类型 长度 range_id char 7 range_myid char 7 range_ageup real 4 range_agelow real 4 range_up char 20 range_low char 20 range_val char 20 sex_myid char 2 method_myid char 4 sample_myid char 4 itm_myid char 4 unit_myid char 4 instru_myid char 4 以上几个表查询,以下查询语句是否准确,我感觉效率不太高select * from(select * from(select * from(select * from itmvals left jion items on itmvals.itm_myid=items.itm_myid) Tb_1 left join ranges on Tb_1.range_myid=ranges.range_myid and b_1.method_myid=ranges.method_myid) Tb_2 left jion units on Tb_2.unit_myid=units.unit_myid) Tb_3 where Tb_3.Pat_id=:myPat_id and Tb_3.sex_myid=:SexmyID and Tb_3.instru_myid=:instrumyid Tb_3.range_up<=:mypattage and Tb_3.range_agelow>=:mypattage and method_myid=:mymethodmyid
 
怎样写出高性能的sql 我也很想知道
 
话说lz能不能描述一下你的查询需求和表的关系呀,直接看sql好痛苦......
 
你把2个表的内容放到一个View里,然后再从View里查询,设好索引,不要用Select * ...尽量把要用到的字段写出来,而且如果可以的话不要用Left Join,改为 Inner Join...仅供参考。
 
因我的粗心大意,把itmvals表搞错成vatypes表,并且有些表有错漏现所有表更正如下患者信息表(patients)列名 数据类型 长度 pat_id char 20 instru_myid char 4 chara_myid char 4 workroom_myid char 4 Sex_myID char 2 year_myID char 2 state_myid char 4pat_tage real 4sample_myid char 4 项目值信息表(itmvals)列名 数据类型 长度 pat_id char 20 itmval_myid char 20 itm_myid char 4 Itmval_val char 20 itmval_sign char 3 method_myid char 4单位类别信息表(units)列名 数据类型 长度 unit_myid char 4 unit_id char 2 unit_name char 10 方法信息表(methods)列名 数据类型 长度method_myid char 4method_id char 4method_name char 20项目信息表(items)列名 数据类型 长度itm_myid char 4itm_id char 4itm_Eng char 20itm_Chan char 20itm_print char 4itm_hl7 char 20itm _dec char 1vatype_myid char 4参考值信息表(ranges)列名 数据类型 长度 range_id char 7 range_myid char 7 range_ageup real 4 range_agelow real 4 range_up char 20 range_low char 20 range_val char 20 sex_myid char 2 method_myid char 4 sample_myid char 4 itm_myid char 4 unit_myid char 4 instru_myid char 4 其几个表的关系如下从表patients左边对应itmvals,其字段为patients.pat_id=itmvals.pat_id接着表itmvals左边对应items,其字段为itmvals.itm_myid=items.itm_myid接着表itmvals左边对应methods,其字段为itmvals.method_myid=methods.method_myid接着表items左边对应ranges,其字段为itmvals.itm_myid=ranges.itm_myid接着表ranges左边对应units,其字段为ranges.unit_myid=units.unit_myid并且要求ranges.sex_myid=patients.sex_myid和ranges.instru_myid=patients.instru_myid和ranges.sample_myid=patients.sample_myid和ranges.range_agelow<=patients.pat_tage>=ranges.range_ageup
 
学会用连接查询吧,子查询效率一般.
 
inner join 要查要久,我现在都避免用了
 
select 你要显示的字段 from 涉及到的表 where 几个表的关系(就是你那一大堆等于) and 要求(就是你那些大于小于)就这么简单好嘛,帮你写出来select * from patients,itmvals,units,methods,items,rangeswhere patients.pat_id=itmvals.pat_id and itmvals.itm_myid=items.itm_myid and itmvals.method_myid=methods.method_myid and itmvals.itm_myid=ranges.itm_myid and ranges.unit_myid=units.unit_myid and ranges.sex_myid=patients.sex_myid and ranges.instru_myid=patients.instru_myid and ranges.sample_myid=patients.sample_myid and ranges.range_agelow<=patients.pat_tage and patients.pat_tage>=ranges.range_ageup
 
我感觉sherlockye效率更差了还不如我本身的好select * from(select * from(select * from(select * from itmvals left jion items on itmvals.itm_myid=items.itm_myid) Tb_1 left join ranges on Tb_1.range_myid=ranges.range_myid and b_1.method_myid=ranges.method_myid) Tb_2 left jion units on Tb_2.unit_myid=units.unit_myid) Tb_3 where Tb_3.Pat_id=:myPat_id and Tb_3.sex_myid=:SexmyID and Tb_3.instru_myid=:instrumyid Tb_3.range_up<=:mypattage and Tb_3.range_agelow>=:mypattage
 
我也碰到过,反正如果连接用的太多,必然引起查询效率大降。关于怎么提高这方面得查询效率,我也很想知道。
 
后退
顶部