MySQL еще не поддерживает Limit && in / all? - PullRequest
0 голосов
/ 17 сентября 2018

Мой запрос выглядит следующим образом:

 SELECT * FROM `C_Institute`
 WHERE `ID` IN
 (SELECT `instituteID` FROM `C_Faculty` WHERE `ID` 
 IN (SELECT `facultyID` FROM `C_EducationalGroup` WHERE `ID` 
 IN (SELECT `educationalGroupID` FROM `C_StudyField` WHERE `ID` 
 IN (SELECT `studyFieldID` FROM `b_PersonEmployment` WHERE `personID`=1 ORDER BY `startDate` limit 1) )));

, но MySQL не поддерживает limit и in в подзапросе.Я не знаю, как я могу написать этот запрос.кто-нибудь может мне помочь, пожалуйста?

заранее спасибо

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Вы можете переписать этот запрос серией объединений:

SELECT c1.*
FROM C_Institute c1
INNER JOIN C_Faculty c2
    ON c1.ID = c2.instituteID
INNER JOIN C_EducationalGroup c3
    ON c2.ID = c3.facultyID
INNER JOIN C_StudyField c4
    ON c3.ID = c4.educationalGroupID
INNER JOIN b_PersonEmployment b
    ON c4.ID = b.studyFieldID
WHERE b.personID = 1
ORDER BY b.startDate
LIMIT 1;
0 голосов
/ 17 сентября 2018

спасибо за ваш ответ.но я думаю, что объединение не является хорошим способом решения этой проблемы.Я сделал это двумя запросами (возможно, не очень хорошая идея, но лучше, чем объединение):

SET @studyFieldID =(SELECT `studyFieldID` FROM `b_PersonEmployment` WHERE `personID`=1 ORDER BY `startDate` limit 1); 
SELECT * FROM `C_Institute`
 WHERE `ID` IN
 (SELECT `instituteID` FROM `C_Faculty` WHERE `ID` 
 IN (SELECT `facultyID` FROM `C_EducationalGroup` WHERE `ID` 
 IN (SELECT `educationalGroupID` FROM `C_StudyField` WHERE `ID`=@studyFieldID 
  )));
0 голосов
/ 17 сентября 2018

Если предположить, что идентификатор в каждой таблице ссылается на другую таблицу, то

Попробуйте это и дайте мне знать:

select * from C_Institute c join C_Faculty f on c.ID=F.instituteID left join C_EducationalGroup e on f.ID=e.facultyID left join C_StudyField sf on e.ID=sf.educationalGroupID left join b_PersonEmployment p on sf.ID=p.studyFieldID where p.personID=1 order by p.startDate limit 1;  

Кроме того, поделитесь описанием своих таблиц для получения дополнительных подсказок

...