[英]MYSQL Insert Data into table using Foreign Keys from different tables
I have a temporary table "teststepdump" created by "LOAD DATA LOCAL INFILE". 我有一个由“ LOAD DATA LOCAL INFILE”创建的临时表“ teststepdump”。 The temporary table contains the Data of different tables connected by foreign keys together in the table TestResult:
临时表包含表TestResult中通过外键连接在一起的不同表的数据:
I´m trying this way using a stored procedure, but I get Error 1452: 我正在使用存储过程尝试这种方式,但出现错误1452:
SQL Fehler (1452): Cannot add or update a child row: a foreign key constraint fails (
database
.teststepresult
, CONSTRAINTteststepresult_ibfk_1
FOREIGN KEY (DUTTestID
) REFERENCESduttest
(ID
) ON DELETE CASCADE ON UPDATE CASCADE)SQL Fehler(1452):无法添加或更新子行:外键约束失败(
database
teststepresult
,CONSTRAINTteststepresult_ibfk_1
FOREIGN KEY(DUTTestID
)参考duttest
(ID
)ON删除duttest
更新duttest
BEGIN
DECLARE dt_id INT;
SELECT teststepresult.DUTTestID INTO dt_id FROM teststepresult
INNER JOIN duttest ON teststepresult.DUTTestID = duttest.ID
INNER JOIN dut ON duttest.DUTID = dut.ID
INNER JOIN station ON duttest.StationID = station.Nummer
INNER JOIN teststepdump ON teststepresult.ID = teststepdump.ID
WHERE
dut.DummyNr = teststepdump.dummyno AND
station.Nummer = teststepdump.stationno;
INSERT INTO teststepresult (DUTTestID, TeststepID, Result)
SELECT dt_id, teststepname.ID, teststepdump.Result
FROM teststepdump
INNER JOIN teststepname ON teststepdump.name = teststepname.name
WHERE
teststepname.name = teststepdump.name;
terminate teststepdump;
END
For a single INSERT this stored Procedure is working for me, but I want to avoid a "for" Loop;: 对于单个INSERT来说,此存储过程对我来说是有效的,但是我想避免“ for”循环;
BEGIN
DECLARE t_id INT;
DECLARE tn_id INT;
SELECT teststepname.ID INTO tn_id FROM teststepname
WHERE teststepname.Name = name;
SELECT duttest.ID INTO t_id FROM duttest
INNER JOIN dut ON duttest.DUTID = dut.ID
INNER JOIN station ON duttest.stationID = station.ID
WHERE
dut.DummyNr = dummyno AND
station.Nummer = stationno;
IF NOT t_id IS NULL AND NOT tn_id IS NULL THEN
INSERT INTO teststepresult (DUTTestID, TeststepID, Result)
VALUES (t_id, tn_id, Result);
END IF;
END
I Solved the Problem ! 我解决了问题!
BEGIN
INSERT INTO teststepresult (DUTTestID, StepName, Result)
SELECT duttest.DUTID, teststepdump.name, teststepdump.Result
FROM duttest
INNER JOIN dut ON duttest.DUTID = dut.ID
INNER JOIN station ON duttest.StationID = station.ID
INNER JOIN teststepdump ON dut.DummyNr = teststepdump.dummyno
WHERE
dut.DummyNr = teststepdump.dummyno AND
station.Nummer = teststepdump.stationno;
#truncate teststepdump;
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.