【问题标题】:Inserting multiple rows into a table with the same foreign key in column1 & different values for column2将多行插入到表中,在 column1 中具有相同的外键,在 column2 中具有不同的值
【发布时间】:2013-11-05 22:47:16
【问题描述】:

我使用 myDBR 为我的数据库创建报告,并且我有一个用于一个报告的表单,我可以在其中为每个事件添加具有多个 DesignTypes 的新 Event。 p>

我有 3 个表:EventsEventID、Event、URL)、DesignTypeDesignTypeID、DesignType ) 和 DesignTypeXEventsDesignTypeXEventID、EventID、DesignTypeID)。

我的表单有 DesignTypes 复选框,应该将 EventIDDesignTypeID 插入到表 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 插入到多行中,但我当然需要 事件ID

【问题讨论】:

    标签: mysql insert foreign-keys mydbr


    【解决方案1】:

    使用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');
    

    【讨论】:

    • 谢谢!我一直在试图找出为什么它没有工作几个小时。我在您的代码末尾更改了一些小东西(请在您的条目中进行编辑,我会接受):在“CROSS JOIN”之后(SELECT DesignTypeID FROM DesignTypes WHERE DesignTypeID IN (', inDesignType, ')) d');
    猜你喜欢
    • 2021-11-15
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    相关资源
    最近更新 更多