2

これまで、ストアド プロシージャを使用して 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 つしか得られない理由について、私は途方に暮れています。ありがとう

4

1 に答える 1