1

myDBR を使用してデータベースのレポートを作成し、各イベントに複数のDesignTypesを持つ新しいイベントを追加できる 1 つのレポート用のフォームを持っています。

イベント( EventID, Event, URL )、DesignType ( DesignTypeID, DesignType )、およびDesignTypeXEvents ( DesignTypeXEventID, EventID, DesignTypeID ) の3 つのテーブルがあります。

私のフォームには DesignTypes のチェックボックスがありEventIDDesignTypeIDをテーブルDesignTypeXEventsに挿入する必要があります。しかし、複数のデザイン タイプを選択すると、Subquery returns more than 1 rowというエラーが表示されます。複数のデザイン タイプを選択した場合、EventID自体を他の行に複製する方法はありますか?

これが私のコードです:

    CREATE PROCEDURE `sp_DBR_events_create`(
    inEvent varchar(70),
    inEventURL varchar(70),
    inDesignType text
    )
    BEGIN

    INSERT INTO Events (Event, URL)
    VALUES (inEvent, inURL);

    set @vSQL = concat('insert into DesignTypeXEvents (EventID, 
    DesignTypeID) values ((SELECT MAX(EventID) FROM Events),
    (select DesignTypeID from DesignTypes where DesignTypeID in
    (', inDesignType, ')))');
    prepare stmt from @vSQL;
    execute stmt;
    deallocate prepare stmt;

EventIDを含めない場合、このコードはうまく機能し、適切なDesignTypeIDを複数の行に挿入しますが、もちろんEventIDが必要です。

4

1 に答える 1

0

INSERT INTO ... SELECTではなく使用しINSERT INTO ... VALUESます。

set @vSQL = concat('
    INSERT INTO DesignTypeXEvents (EventID, DesignTypeID)
    SELECT MaxEvent, DesignTypeID
    FROM (SELECT MAX(EventID) MaxEvent FROM Events) m
    CROSS JOIN
    (SELECT DesignTypeID FROM DesignTypes WHERE DesignTypeID IN (', inDesignType, ')) d');
于 2013-11-05T22:53:47.517 に答える