【发布时间】:2012-03-05 20:11:57
【问题描述】:
如果我想为特定列选择具有最大值的行,我可以简单地这样做
SELECT * FROM tablename WHERE columnname=(SELECT MAX(columnname) FROM tablename)
我的问题是双重的。首先,如果这个值不是列而是对行进行操作的存储过程的结果,那么语法是什么?类似的东西
SELECT * FROM tablename
WHERE CALL procname (???)
= (SELECT MAX (CALL procname (???) FROM tablename)
如何充实这个查询?
其次,在这种幼稚的形式中,我们对每一行调用一次procname 以确定MAX(...),然后可能对每一行调用一次再次以测试每一行是否具有最大值。
我该如何优化呢?我猜它可能与临时表有关,但我不知道引擎有多聪明,我在心理上将它与只需要维护的 C 风格 for 循环的性能进行比较一次一行的值。
【问题讨论】: