简体   繁体   English

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

[英]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中通过外键连接在一起的不同表的数据:

  1. teststepdump (dummyno, stationno, name, result) teststepdump(dummyno,stationno,名称,结果)
  2. duttest (ID, DUTID, processTime) duttest(ID,DUTID,processTime)
  3. dut (ID, DummyNr) dut(ID,DummyNr)
  4. station (ID, stationno) 站号(ID,站号)
  5. teststepname(ID, name) teststepname(ID,名称)
  6. teststepresult(DUTTestID,TeststepID,Result) teststepresult(DUTTestID,TeststepID,Result)

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 , CONSTRAINT teststepresult_ibfk_1 FOREIGN KEY ( DUTTestID ) REFERENCES duttest ( ID ) ON DELETE CASCADE ON UPDATE CASCADE) SQL Fehler(1452):无法添加或更新子行:外键约束失败( database teststepresult ,CONSTRAINT teststepresult_ibfk_1 FOREIGN KEY( DUTTestID )参考duttestID )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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM