Filling foreign key values of a table through loop

Viewed 47

I am trying to copy data from one table to another schema. But while copying the content I am struggling to fill foreign key values in the second database. Let's say the table (from which I'm trying to copy the data) is-

Sample_

v1 v2 v3 v4
1 5 'A1' 'B2'
2 6 'A1' 'B1'
3 7 'A1' 'B2'
4 8 'A2' 'B2'

Now, I have created another schema which has 3 tables:

main_

idx v1 v2 v3_id v4_id

V3_

v3_id v3
1 'A1'
2 'A2'

V4_

v4_id v4
1 'B1'
2 'B2'

I have filled V3_, and V4_ but I haven't been able to fill main_ because of an error. I'm using loop to fill the values. I have ran the following code.

CREATE PROCEDURE ROWPERROW()
BEGIN
    DECLARE n INTEGER DEFAULT NULL;
    DECLARE i INTEGER DEFAULT NULL;
    SELECT COUNT(*) FROM sample_ INTO n;
    SET i=0;
    WHILE i<n DO
      INSERT INTO main_(v1, v2) SELECT (v1, v2) FROM sample_ LIMIT i,1;
      INSERT INTO main_(v3) SELECT v3_id FROM V3_ WHERE V3_.v3=SELECT v3 FROM sample_ LIMIT i, 1;
      INSERT INTO main_(v4) SELECT v4_id FROM V4_ WHERE V4_.v4=SELECT v4 FROM sample_ LIMIT i, 1;
      SET i = i + 1;
    END WHILE;
End;
;;

Error message:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT v3 FROM sample_ LIMIT i, 1; INSERT INTO main_(v4) SELECT v4_id FRO' at line 9

I don't understand why it is showing syntax error. Also, is there a better way to copy data from a one schema to another?

I want main_ to look like this-

main_

idx v1 v2 v3_id v4_id
1 1 5 1 2
2 2 6 1 1
3 3 7 1 2
4 4 8 2 2
1 Answers

Instead of looping, I was able to find another solution. I am sharing it below- INSERT INTO main_ (v1, v2, v3_id, v4_id) SELECT v1, v2, v3_id, v4_id FROM (SELECT v1, v2, v3_id, v4_id FROM (SELECT v1, v2, v3_id, v4 FROM sample_ INNER JOIN V3_ ON sample_.v3 = V3_.v3) AS new INNER JOIN V4_ ON new.v4 = V4_.v4) as new1;

Related