但这对每一行都执行子查询,并且效率很低
首先,您是否有一个证明这一点的查询计划/时间安排?您完成操作的方式(使用子选择)几乎是执行操作的“直观”方式。许多DBMS(尽管我不确定MySQL)都针对这种情况进行了优化,并且将只能执行一次查询。
另外,您应该能够仅使用一个
(user id, latest email id)元组创建一个子表,并
JOIN在其上:
SELECt users.userId, users.username, userEmail.emailFROM usersINNER JOIN (SELECt userId, MAX(emailId) AS latestEmailId FROM userEmail GROUP BY userId) AS latestEmails ON (users.userId = latestEmails.userId)INNER JOIN userEmail ON (latestEmails.latestEmailId = userEmail.emailId)ORDER BY users.username;



