在column1和amp;中使用相同的外键将多行插入表中column2的不同值

时间:2013-11-05 22:47:17

标签: mysql insert foreign-keys mydbr

我使用myDBR为我的数据库创建报告,我有一个报告表单,我可以为每个事件添加一个新的事件,其中包含多个 DesignTypes

我有3个表:事件 EventID,事件,网址), DesignType DesignTypeID,DesignType )和 DesignTypeXEvents DesignTypeXEventID,EventID,DesignTypeID )。

我的表单包含 DesignTypes 的复选框,应将 EventID DesignTypeID 插入表 DesignTypeXEvents 。但是,如果我选择多个设计类型,我会收到一条错误,指出子查询返回的行数超过1行。如果我选择多种设计类型,有没有办法让 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

1 个答案:

答案 0 :(得分: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');