これまで、ストアド プロシージャを使用して 3 つのテーブルのデータにアクセスするさまざまな方法を試してきました。最初に、単純な選択ステートメントを試しました:
create procedure reportCodes () begin
SELECT Numbers.serial_numb, numOwner.lName, numOwner.fName, numOwner.email,
location.long, location.lat, Numbers.dateValidated
FROM Numbers, Owner, location
WHERE Numbers.used = true AND Numbers.id=numOwner.Numbers_id AND
Numbers.id=location.Numbers_id;
end$$
(有罪を保護するために名前が変更されました)
phpmyadmin でストアド プロシージャを実行すると、レコードの最初のインスタンスが生成されます (テスト データベースの 2 つの「true」のうち 1 つ)。実行中:
SELECT Numbers.serial_numb, numOwner.lName, numOwner.fName, numOwner.email,
location.long, location.lat, Numbers.dateValidated
FROM Numbers, Owner, location
WHERE Numbers.used = true AND Numbers.id=numOwner.Numbers_id AND
Numbers.id=location.Numbers_id;
phpmyadmin SQL タブで両方のレコードを返します。次に、一時テーブルを試しました:
create procedure reportCodes () begin
CREATE TEMPORARY TABLE used_numbers AS (
SELECT Numbers.serial_numb, numOwner.lName, numOwner.fName, numOwner.email,
location.long, location.lat, Numbers.dateValidated
FROM Numbers, Owner, location
WHERE Numbers.used = true AND Numbers.id=numOwner.Numbers_id AND
Numbers.id=location.Numbers_id);
SELECT * FROM used_numbers; end$$
手順として 2 つのレコードのうちの 1 つを返しますが、両方のレコードがコンソールに表示されます。最後に、テーブルを結合に変更してみました:
CREATE PROCEDURE reportCodes()
begin
create temporary table used_numbers AS (
SELECT Numbers.serial_numb, numOwner.lName, numOwner.fName, numOwner.email,
location.long, location.lat, Numbers.dateValidated
FROM Numbers JOIN numOwner
ON Numbers.id=numOwner.Numbers_id
JOIN location ON
numOwner.Numbers_id=location.Numbers_id
WHERE Numbers.used = true
);
SELECT * FROM used_numbers; end$$
上記と同じ結果です。SQL だけを実行すると両方のテスト レコードが表示されるのに、まったく同じコードでプロシージャを実行すると 1 つしか得られない理由について、私は途方に暮れています。ありがとう