MYSQL使用不同表的外键将数据插入表中

标签 mysql database stored-procedures

我有一个由“LOAD DATA LOCAL INFILE”创建的临时表“teststepdump”。临时表包含表TestResult中通过外键连接在一起的不同表的数据:

  1. teststepdump(虚拟编号、站号、名称、结果)
  2. duttest(ID、DUTID、processTime)
  3. dut(ID、DummyNr)
  4. 车站(ID、车站编号)
  5. teststepname(ID, 名称)
  6. teststepresult(DUTTestID,TeststepID,结果)

我正在使用存储过程尝试这种方式,但收到错误 1452:

SQL Fehler (1452): Cannot add or update a child row: a foreign key constraint fails (database.teststepresult, CONSTRAINT teststepresult_ibfk_1 FOREIGN KEY (DUTTestID) REFERENCES duttest (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/

相关文章:

php - 获取唯一 ID 并用作页面的 url

mysql - 仅日期搜索 DATETIME 或 DATE 格式哪个更快

sql-server - 有没有办法组合这些查询?

sql - Drop Master Key 继续运行

sql - 如何在存储过程中传递列表作为参数?

c# - 使用 SQL Server 管理对象将存储过程从一个 SQL Server 2008 复制到另一个 SQL Server 2008

java - 字段 'user_id' 没有默认值,但设置为 auto_increment

mysql - 使用外键不仅仅是为了约束

c# - 为什么要使用 SqlCommand.CommandType = StoredProcedure?

python mysql不正确的字符串值警告