我使用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 。
答案 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');