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