MySQL データベースにクエリを実行しようとしています。データベースに整数として格納されているフィールドは、期待どおりの整数として返されます。ストアド プロシージャで計算された値がある場合、数値が 0 または 1 になることを保証できる場合でも、常に longlong として返されます。
計算フィールドの結果が引き続き int として返されるようにする方法が必要です。
興味深いことに、ビューで計算を行ってからそのビューにクエリを実行すると、問題が解決するように見えますが、パフォーマンスが大幅に低下します。
編集
私が使用しようとしている種類の手順の例は次のとおりです。
DELIMITER //
CREATE PROCEDURE getProjectFinance(IN projectID varchar(30))
BEGIN
SELECT p.projectID as id,
(Select sum(COALESCE(v.Cost, 0))
from variations v
where v.projectID = p.projectID) as total
FROM Projects p
WHERE p.projectID = projectID;
END//
DELIMITER ;
DELIMITER //
CREATE PROCEDURE getAllProjectsFinance()
BEGIN
SELECT p.projectID as id,
(Select sum(COALESCE(v.Cost, 0))
from variations v
where v.projectID = p.projectID) as total
FROM Projects p
END//
DELIMITER ;
編集 2
問題を少し単純化しようとしました。次の SQL コマンドは、longlong (8 バイト) 型の単一フィールド (count) を持つレコードを返します。整数型(4バイト)にしたい
SELECT (Select 1) as count;
次のようにキャストを使用しても役に立ちません。
SELECT cast((Select 1) as signed integer) as count;