访问中from子句中的语法错误

时间:2014-04-29 05:54:43

标签: sql ms-access

下面是我的查询,它说from子句中的语法错误,而它在SQL完全正常工作。错误后#39; AS'突出显示

SELECT 
  Table1.*,
  emp_details_full1.* 
FROM Table1 
LEFT JOIN  
  ((SELECT
      iss_personal_detail.Specialization, 
      iss_personal_detail.New_rank,
      iss_personal_detail.Induction_tr, 
      iss_personal_detail.Title,
      iss_personal_detail.f_name, 
      iss_personal_detail.m_name,
      iss_personal_detail.l_name, 
      iss_personal_detail.Father_Hus_Name,
      iss_personal_detail.Category, 
      iss_personal_detail.Community,
      iss_personal_detail.SEX, 
      iss_personal_detail.source_recruit,
      iss_personal_detail.Pay_Parity, 
      iss_personal_detail.[Date_Pay_Parity], 
      iss_personal_detail.UPSC_Rank, 
      iss_personal_detail.dob,
      iss_personal_detail.doj_govt, 
      iss_personal_detail.DOA_ISS,
      iss_personal_detail.Batch, 
      iss_personal_detail.Year_of_Exam,
      iss_personal_detail.Native_Distt, 
      iss_personal_detail.Native_State,
      iss_personal_detail.[Highest Qualification],
      iss_personal_detail.Languages_Known, 
      iss_personal_detail.Mother_Toung,
      iss_personal_detail.Marital_Status, 
      iss_personal_detail.E_mail_ID,
      iss_personal_detail.retire_reason, 
      iss_personal_detail.title_m,
      Present_Posting.*, 
      ISS_MINISTRY_CODE_LIST.*,
      ISS_DEPARTMENT_CODE_LIST.*, 
      ISS_CITY_CODE_LIST.*, 
      Desig_Code.*,
      Grade_Code.Grade_code 
FROM ISS_CITY_CODE_LIST 
INNER JOIN( Grade_Code
INNER JOIN  (Desig_Code 
INNER JOIN  (((iss_personal_detail 
INNER JOIN  Present_Posting 
  ON iss_personal_detail.OID = Present_Posting.OID) 
INNER JOIN ISS_MINISTRY_CODE_LIST 
  ON Present_Posting.ministry = ISS_MINISTRY_CODE_LIST.MINISTRY_CODE) 
INNER JOIN  ISS_DEPARTMENT_CODE_LIST 
  ON Present_Posting.department =    ISS_DEPARTMENT_CODE_LIST.DEPARTMENT_CODE)  
  ON Desig_Code.Code =  Present_Posting.designation) 
  ON Grade_Code.Grade_code = Present_Posting.Grade) 
  ON ISS_CITY_CODE_LIST.city_code=Present_Posting.office_city 
))  AS emp_details_full1 ON 
(emp_details_full1.DEPARTMENT_CODE=Table1.department) AND
(emp_details_full1.MINISTRY_CODE=Table1.ministry)  AND
(emp_details_full1.city_code=Table1.city) AND
(emp_details_full1.Grade_Code=Table1.grade) 
WHERE Table1.grade='02';

1 个答案:

答案 0 :(得分:0)

我要做的第一件事就是选择内部选择并从中创建一个视图。 这将提供一个简单易读,易于调试的sql代码。

CREATE VIEW emp_details_full1
AS
SELECT iss_personal_detail.Specialization, iss_personal_detail.New_rank, 
iss_personal_detail.Induction_tr, iss_personal_detail.Title, 
iss_personal_detail.f_name, iss_personal_detail.m_name, 
iss_personal_detail.l_name, iss_personal_detail.Father_Hus_Name, 
iss_personal_detail.Category, iss_personal_detail.Community, 
iss_personal_detail.SEX, iss_personal_detail.source_recruit, 
iss_personal_detail.Pay_Parity, iss_personal_detail.[Date_Pay_ Parity], 
iss_personal_detail.UPSC_Rank, iss_personal_detail.dob, 
iss_personal_detail.doj_govt, iss_personal_detail.DOA_ISS, 
iss_personal_detail.Batch, iss_personal_detail.Year_of_Exam, 
iss_personal_detail.Native_Distt, iss_personal_detail.Native_State, 
iss_personal_detail.[Highest Qualification], 
iss_personal_detail.Languages_Known, 
iss_personal_detail.Mother_Toung, iss_personal_detail.Marital_Status, 
iss_personal_detail.E_mail_ID, iss_personal_detail.retire_reason, 
iss_personal_detail.title_m, Present_Posting., ISS_MINISTRY_CODE_LIST., 
ISS_DEPARTMENT_CODE_LIST., ISS_CITY_CODE_LIST., Desig_Code.*, 
Grade_Code.Grade_code 
FROM ISS_CITY_CODE_LIST INNER JOIN( Grade_Code INNER JOIN (Desig_Code INNER JOIN 
(((iss_personal_detail INNER JOIN Present_Posting ON iss_personal_detail.OID = 
Present_Posting.OID) INNER JOIN ISS_MINISTRY_CODE_LIST 
ON Present_Posting.ministry = ISS_MINISTRY_CODE_LIST.MINISTRY_CODE) 
INNER JOIN ISS_DEPARTMENT_CODE_LIST ON 
Present_Posting.department = ISS_DEPARTMENT_CODE_LIST.DEPARTMENT_CODE) ON 
Desig_Code.Code = Present_Posting.designation) ON Grade_Code.Grade_code = 
Present_Posting.Grade)
ON ISS_CITY_CODE_LIST.city_code=Present_Posting.office_city

然后sql的其余部分将如下所示:

SELECT Table1.,emp_details_full1. 
FROM Table1 LEFT JOIN emp_details_full1
ON (emp_details_full1.DEPARTMENT_CODE=Table1.department) AND    
(emp_details_full1.MINISTRY_CODE=Table1.ministry) AND 
(emp_details_full1.city_code=Table1.city) AND 
(emp_details_full1.Grade_Code=Table1.grade) WHERE Table1.grade='02';

现在,如果仔细观察,可以看到在ON子句的结尾和WHERE子句的开头之间缺少一个结束括号。 所以要解决这个问题:

SELECT Table1.,emp_details_full1. 
FROM Table1 LEFT JOIN emp_details_full1
ON (emp_details_full1.DEPARTMENT_CODE=Table1.department) AND    
(emp_details_full1.MINISTRY_CODE=Table1.ministry) AND 
(emp_details_full1.city_code=Table1.city) AND 
(emp_details_full1.Grade_Code=Table1.grade)) WHERE Table1.grade='02';

使用起来容易吗?