0
如果我要选择具有特定列最大值的行,我可以简单地这样做SQL选择以行其最大值时的最大化值从排计算机
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循环的性能进行了比较,它只需要维护一次一行的值。
你能给我一个链接来解释'@'和':='语法吗?我不确定我是否明白这一点......是否在原地修改表格? – spraff 2012-02-14 13:06:15
'@ xxx'是一个会话变量 - 将它与PHP中的$ xxx进行比较。 ':='是赋值运算符(就像在Pascal中一样)。请参阅http://dev.mysql.com/doc/refman/5.5/en/user-variables.html – 2012-02-14 13:15:45