我有一个由“LOAD DATA LOCAL INFILE”创建的临时表“teststepdump”。临时表包含表TestResult中通过外键连接在一起的不同表的数据:
- teststepdump(虚拟编号、站号、名称、结果)
- duttest(ID、DUTID、processTime)
- dut(ID、DummyNr)
- 车站(ID、车站编号)
- teststepname(ID, 名称)
- teststepresult(DUTTestID,TeststepID,结果)
我正在使用存储过程尝试这种方式,但收到错误 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)
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
对于单个 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
最佳答案
我解决了问题!
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
关于MYSQL使用不同表的外键将数据插入表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38187365/