【问题标题】:MySQL doesn't yet support Limit&& in/all?MySQL 还不支持 Limit&& in/all?
【发布时间】:2018-09-17 05:34:31
【问题描述】:

我的查询如下:

 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不支持limitin子查询。我不知道如何编写此查询。 谁能帮帮我?

提前致谢

【问题讨论】:

  • 你用的是哪个版本的mysql?
  • 你有错误吗?显示错误消息..错误的结果更新了您的问题添加正确的数据样本和预期的结果
  • @scaisEdge MySQL 5.7.21

标签: mysql subquery limit


【解决方案1】:

您可以将此查询重写为一系列连接:

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;

【讨论】:

    【解决方案2】:

    假设每个表中的 ID 都指向另一个表,

    试试这个,让我知道:

    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;  
    

    另外,分享您的表格描述以获取更多线索

    【讨论】:

    • 我认为这不是一个好主意。表太大,连接成本很高。
    • 如果您在这些列上有索引,那么我认为应该没问题。此外,您可以使用“EXPLAIN plan”分析查询以获得更详细的外观。
    【解决方案3】:

    感谢您的所有回答。但我认为加入不是解决这个问题的好方法。我已经通过两个查询完成了(可能不是好主意但比加入更好):

    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 
      )));
    

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 2014-07-18
      • 2022-07-22
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多