2016-07-04 12 views
0

"LOAD DATA LOCAL INFILE"によって作成されたテンポラリテーブル "teststepdump"があります。一時テーブルは、テーブルTestResultで一緒に外部キーによって接続された別のテーブルのデータを含む:MYSQL異なるテーブルの外部キーを使用してテーブルにデータを挿入

  1. teststepdump(dummyno、stationno、名前、結果)
  2. (ID、DUTID、processTime)
  3. DUT duttest (ID、DummyNr)
  4. 局(ID、stationno)
  5. teststepname(ID、名前)
  6. teststepresult(DUTTestID、TeststepID、結果)

- 私は、ストアドプロシージャを使用して、この方法を試したが、私はエラー1452を取得:

SQL Fehler(1452):子行を追加または更新できません:外部キー 制約が失敗した(databaseを。 teststepresult、単一のINSERTこのストアドプロシージャの制約 teststepresult_ibfk_1 FOREIGN KEY(DUTTestIDduttestID)を参照UPDATE CASCADE ON DELETE CASCADE ON)

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" Loop;:

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 
+0

テーブル 'teststepdump'の構造を教えてください。 (0)、 'stationno' INT(11)は、作成したSQLコードを意味します。 –

+0

CREATE TABLE' teststepdump'( 'ID' INT(11)NOT NULL AUTO_INCREMENT、 ' dummyno' BIGINT(20)NOT NULL DEFAULT '0' NOT NULL DEFAULT '0'、 'name'のVARCHAR(50)NOT NULL DEFAULT '0' COLLATE 'utf8_bin'、' Result' TINYINT(4)NULLデフォルトNULL、 PRIMARY KEY( 'ID') – Fantomas

+0

それはdoesnのようです外部キーを持っています...あなたは 'teststepresult'の構造を表示できますか? –

答えて

1

私はこの問題を解決しました。

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 
関連する問題