1

これが私が現在抱えている問題です。

旅行データの7つのテーブルがあります。私が現在行っていることは、3 番目のテーブルから Card_ID をランダムに選択し、その Card_ID を持つ 7 つのテーブルすべてを検索し、その特定の Card_ID によって作成されたすべてのレコードを選択することです。

問題は、多数の結果セットが生成されることです。これは、手動で 1 つずつエクスポートする必要があるため、問題を引き起こします。約 2000 の WHILE ループのレコードを 1 つの結果セットに結合して、このプロセスを「自動化」する方法はありますか?

前もって感謝します。

BEGIN
DECLARE counter INT;
DECLARE random INT;
DECLARE cardid VARCHAR(20);
SET counter = 1;

WHILE counter < 801 DO

    SET random = FLOOR(1 + (RAND() * 5451696));
    SET cardid = (SELECT CARD_ID FROM trips13042011 WHERE TripID = random);

    SELECT * FROM trips11042011 WHERE CARD_ID=cardid 
    UNION ALL
    SELECT * FROM trips12042011 WHERE CARD_ID=cardid
    UNION ALL
    SELECT * FROM trips13042011 WHERE CARD_ID=cardid
    UNION ALL
    SELECT * FROM trips14042011 WHERE CARD_ID=cardid    
    UNION ALL
    SELECT * FROM trips15042011 WHERE CARD_ID=cardid
    UNION ALL
    SELECT * FROM trips16042011 WHERE CARD_ID=cardid
    UNION ALL
    SELECT * FROM trips17042011 WHERE CARD_ID=cardid

    ORDER BY Ride_Start_Date, Ride_Start_Time ASC;

    SET counter = counter + 1;

end WHILE;
END
4

1 に答える 1

2

私はあなたが使用している言語(mySQLスクリプトコード??)に精通していませんが、私の理解では、次のようなことを試してみてください:

-whileループを実行して、801(または必要なもの)のランダム要素の配列を作成します。-配列をwhere句に追加します->WHERECARD_ID IN(308、3746、72827、1など)配列の801番目の要素まで

DECLARE rdmArray ARRAY;

WHILE counter < 801 DO
     SET random = FLOOR(1 + (RAND() * 5451696));
     SET cardid = (SELECT CARD_ID FROM trips13042011 WHERE TripID = random);
     rdmArray.push_back(cardid );
     SET counter = counter + 1;
end WHILE;

SELECT * FROM trips11042011 WHERE CARD_ID IN (//element of rdmArray here) 
UNION ALL
SELECT * FROM trips12042011 WHERE CARD_ID IN (//element of rdmArray here)
UNION ALL
SELECT * FROM trips13042011 WHERE CARD_ID IN (//element of rdmArray here)
UNION ALL
SELECT * FROM trips14042011 WHERE CARD_ID IN (//element of rdmArray here)   
UNION ALL
SELECT * FROM trips15042011 WHERE CARD_ID IN (//element of rdmArray here)
UNION ALL
SELECT * FROM trips16042011 WHERE CARD_ID IN (//element of rdmArray here)
UNION ALL
SELECT * FROM trips17042011 WHERE CARD_ID IN (//element of rdmArray here)

ORDER BY Ride_Start_Date, Ride_Start_Time ASC;

...

あなたの質問を私が理解するために、それは私がしなければならないと思うことです。

この助けを願っています!

アントワーヌ

于 2013-01-31T05:28:30.233 に答える