MySQLにストアドプロシージャは次のとおりです。
CREATE PROCEDURE topModels(modelCount INT)
BEGIN
select brand_name as brandName,
model_number as modelNumber,
model_description as modelDescription,
parts
from
(
select model_number, model_description, parts
,@rownum := if(@brand=t.brand_name, @rownum, 0) + 1 as rownum
,@brand := t.brand_name as brand_name
from
(
select brand_name, model_number, model_description, parts,
from model f
group by brand_name, model_number, model_description
order by brand_name, sum(sold_count) desc
) t
) tbl
where rownum<=5
END
MySQLワークベンチを開いて実行すると:
CALL topModels(5)
約3000行を返しますが、これは正しい結果です。
Javaから実行すると:
java.sql.CallableStatement cs = connection.
prepareCall("CALL topModels(5)");
java.sql.ResultSet rs = cs.executeQuery();
「whererownum<=5」条件を無視するかのように約400,000行を返します。
私は何を間違えますか?