在内连接mysql中使用子查询

时间:2014-04-28 07:27:57

标签: mysql sql join

这是我的查询

SELECT CONCAT(`SM_Title`,' ',`SM_Full_Name`) AS NAME,
`RG_Date`,
`RG_Reg_No`,
`RG_Stu_ID`,
`SM_Tell_Mobile`,
`SM_Tel_Residance`,
`RG_Reg_Type`,
Default_Batch,
`RG_Status`,
`RG_Final_Fee`,
`RG_Total_Paid`,
(`RG_Final_Fee`-`RG_Total_Paid`) AS TOTALDUE, 
SUM(`SI_Ins_Amount` - `SI_Paid_Amount`) AS AS_AT_APRIAL_END 
INNER JOIN 
(SELECT `SI_Ins_Amount`,
 `SI_Reg_No` 
  FROM
  `student_installments` 
  GROUP BY MONTHNAME(`SI_Due_Date`)) Z ON
  Z.`SI_Reg_No` = `registrations`.`RG_Reg_No` 
FROM `registrations` 
LEFT JOIN `student_master` ON `student_master`.`SM_ID` = `registrations`.`RG_Stu_ID`
LEFT JOIN `student_installments` ON `student_installments`.`SI_Reg_No` = `registrations`.`RG_Reg_No` 
WHERE (`RG_Reg_Type` LIKE '%HND%' OR `RG_Reg_Type` LIKE '%LMU%' ) 
AND `SI_Due_Date` <= '2014-04-30' GROUP BY `SI_Reg_No`

它在

附近给了我一个错误

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Z LIMIT 0, 25' at line 1

4 个答案:

答案 0 :(得分:0)

SELECT 
CONCAT(SM_Title,' ',SM_Full_Name) AS NAME,
RG_Date, 
RG_Reg_No,
RG_Stu_ID,
SM_Tell_Mobile,
SM_Tel_Residance,
RG_Reg_Type,
Default_Batch,
RG_Status,
RG_Final_Fee,
RG_Total_Paid,
(RG_Final_Fee-RG_Total_Paid) AS TOTALDUE,
 SUM(SI_Ins_Amount - SI_Paid_Amount) AS AS_AT_APRIAL_END
FROM registrations  
 INNER JOIN 
(SELECT SI_Ins_Amount,SI_Reg_No 
FROM student_installments 
GROUP BY MONTHNAME(SI_Due_Date)) Z ON Z.SI_Reg_No = registrations.RG_Reg_No 
LEFT JOIN student_master ON student_master.SM_ID = registrations.RG_Stu_ID 
LEFT JOIN student_installments ON student_installments.SI_Reg_No = registrations.RG_Reg_No 
WHERE (RG_Reg_Type LIKE '%HND%' OR RG_Reg_Type LIKE '%LMU%' ) 
AND SI_Due_Date <= '2014-04-30' 
GROUP BY SI_Reg_No

答案 1 :(得分:0)

我注意到你已经将你想要加入的左表或子选择模糊(SELECT SI_INs .....),之前我可以看到在加入之前没有from子句。

我希望这会对你有所帮助 此致

答案 2 :(得分:0)

你正在使用from子句在错误的位置它应该只是在你的列选择之后,你可以使用下面的查询:

SELECT 
CONCAT(SM_Title,' ',SM_Full_Name) AS NAME ,RG_Date,RG_Reg_No,RG_Stu_ID,SM_Tell_Mobile,SM_Tel_Residance,RG_Reg_Type,Default_Batch,RG_Status,RG_Final_Fee,RG_Total_Paid,(RG_Final_Fee-RG_Total_Paid) AS TOTALDUE, SUM(SI_Ins_Amount - SI_Paid_Amount) AS AS_AT_APRIAL_END
FROM registrations AS reg
JOIN 
(SELECT 
SI_Ins_Amount,SI_Reg_No 
FROM student_installments
GROUP BY MONTHNAME(SI_Due_Date)) AS Z
ON Z.SI_Reg_No = reg.RG_Reg_No 
LEFT JOIN student_master AS sm 
ON sm.SM_ID = reg.RG_Stu_ID 
LEFT JOIN student_installments AS si 
ON si.SI_Reg_No = reg.RG_Reg_No 
WHERE (RG_Reg_Type LIKE '%HND%' OR RG_Reg_Type LIKE '%LMU%' ) AND SI_Due_Date <= '2014-04-30' 
GROUP BY SI_Reg_No;

答案 3 :(得分:0)

在下面的部分中,from关键字应该在内部联接之前:

FROM registrations
INNER JOIN
  (SELECT SI_Ins_Amount,
    SI_Reg_No
  FROM student_installments
  GROUP BY MONTHNAME(SI_Due_Date)
 ) Z
ON Z.SI_Reg_No = registrations.RG_Reg_No
相关问题