加入问题,最好的选择是什么?

时间:2011-05-19 10:26:41

标签: asp.net sql sql-server join informix

问:

我有5或6个表,我需要这些表中的数据: 我发出以下连接语句来完成我的查询。

SELECT d.batch_no,d.studytype_code,d.camp_code,d.dep_code,d.start_date,d.end_date,a.year,a.term_code,c.studytype_name ,e.dep_name_ar,f.camp_name_ar
FROM llkbatch a , llkbatch_category b , mm19studytype c ,llkbatch_exception d  ,llkdepartment e,llkcamp f
WHERE   a.batch_no = b.batch_no
AND  b.studytype_code = c.studytype_code 
AND  b.batch_no = d.batch_no
AND b.studytype_code = d.studytype_code 
AND d.dep_code = e.dep_code
AND d.camp_code = f.camp_code

但我认为join有时表现不那么糟糕,在programming waydatabase layer中是否有替代方法,我的意思是加入一般,什么时候我应该离开连接。 非常感谢。

2 个答案:

答案 0 :(得分:3)

有一种更现代的ANSI连接语法,可以使您的连接更具可读性,但不应影响性能:

SELECT d.batch_no,d.studytype_code,d.camp_code,d.dep_code,d.start_date,d.end_date,
       a.year,a.term_code,c.studytype_name ,e.dep_name_ar,f.camp_name_ar
FROM ra1batch a 
JOIN ra1batch_category b ON a.batch_no = b.batch_no
JOIN ra1studytype c ON b.studytype_code = c.studytype_code
JOIN ra1batch_exception d ON b.batch_no = d.batch_no
                         AND b.studytype_code = d.studytype_code 
JOIN rr1department e ON d.dep_code = e.dep_code
JOIN rr2camp f ON d.camp_code = f.camp_code

答案 1 :(得分:2)

您在问题中编写的查询遵循Oracle的语法。但是您使用连接就像使用SQL Server一样。与您当前的查询相比,它将为您提供更好的性能。

与您当前的查询相比,以下查询的解析速度更快。

SELECT d.batch_no, d.studytype_code, d.camp_code, …
FROM ra1batch a
INNER JOIN ra1batch_category b on a.batch_no = b.batch_no