【问题标题】:How to rewrite a 'select top x subquery' to use joins?如何重写“选择顶部 x 子查询”以使用连接?
【发布时间】:2016-01-18 23:14:10
【问题描述】:

我有一个使用子查询的查询,我想重写为一个连接,以获得更好的性能。 (毫秒访问)

那么我该如何重写这样的查询以使用连接:

SELECT t.StudentID, t.subject, t.testid, t.TestScore, t.ID
FROM MyTable AS t
WHERE (((t.[TestID]) In (SELECT TOP 2 testid
                         FROM MyTable
                         WHERE StudentID = t.StudentID 
                         AND subject = t.subject
                         ORDER BY TestScore asc, testid)))
ORDER BY t.StudentID, t.TestScore, t.testID;

就像 Gordon Linoff 所说,如果这不能轻易地改写为连接语法,那么“not in”又如何呢? 这也很难重写为连接语法吗? 另外,仅供参考,我使用 MS-access。

选择 t.StudentID、t.subject、t.testid、t.TestScore、t.ID 从 MyTable 作为 t WHERE t.TestID 不在(SELECT TOP 2 testid 从我的表 WHERE StudentID = t.StudentID AND 主题 = t.subject ORDER BY TestScore asc, testid))) 按 t.StudentID、t.TestScore、t.testID 排序;

【问题讨论】:

    标签: sql ms-access join rewrite


    【解决方案1】:

    您不能(轻松)重写此查询以使用joins。相反,您可以添加索引。

    这个查询的最佳索引是MySQL(StudentId, subject, TestScore, testid)

    【讨论】:

    • 感谢您的回答。
    猜你喜欢
    • 2021-11-09
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    相关资源
    最近更新 更多