我有两个数据库。第一个数据库是我的主数据库,第二个数据库用于以JSON格式导入结构不良的数据片段。我将结构不良的数据导入第二个数据库,在将数据导入主数据库之前为数据提供一些基本结构。
第一个数据库包含四十三个表。第二个数据库由四个表组成。下面我将讨论相关表格。
Database1 Database2
Table1 Table1
Table2 Table2
Table3
目前我尝试将第二个数据库中的数据导入Table1。表1由五列(Col1,Col2,Col3,Col4,Col5)组成。第1列到第4列是主键,设置为NOT NULL
。
要填充第1列到第5列,我使用以下SQL代码调用Database1表2和3以及Database2表1和2:
INSERT INTO DB1.Table1 (Col1, Col2, Col3, Col4, Col5)
SELECT DISTINCT D1T2.Col6, D1T3Col7, D2T1Col8, D2T1Col9, D2T1Col10
FROM Database1.Table2 AS D1T2, Database1.Table3 AS D1T3, Database2.Table1 AS D2T1
WHERE D1T2.Col6 IN (SELECT DISTINCT COL6 FROM Database1.Table2
WHERE (Col11, Col12) IN (SELECT DISTINCT Col13, Col14 FROM Database2.Table2))
AND D1T3.Col7 IN (SELECT DISTINCT COL7 FROM Database1.Table3 WHERE (Col15)
IN (SELECT DISTINCT Col16 FROM Database2.Table1));
当我在一些样本数据上运行上面的代码时,我期待三个结果。不幸的是,我得到了九个不同的结果。下面是一个结果的例子,我期待着我得到的结果。
预期结果:
Database1.Table1
Col1 Col2 Col3 Col4 Col5
Val1 Val2 Val3 Val4 Val5
Val1 Val6 Val7 Val8 Va9
Val1 Val10 Val11 Val12 Val13
实际结果:
Database1.Table1
Col1 Col2 Col3 Col4 Col5
Val1 Val2 Val3 Val4 Val5
Val1 Val2 Val7 Val8 Va9
Val1 Val2 Val11 Val12 Val13
Val1 Val6 Val3 Val4 Val5
Val1 Val6 Val7 Val8 Va9
Val1 Val6 Val11 Val12 Val13
Val1 Val10 Val3 Val4 Val5
Val1 Val10 Val7 Val8 Va9
Val1 Val10 Val11 Val12 Val13
我想这意味着SQL代码在某处循环。由于我不熟悉(My)SQL,我该怎么办才能获得三个结果?
在多个语句中运行代码是不行的,因为它会产生错误#1452
无法添加或更新子行:外键约束失败。
如果您需要更多信息,我很乐意将其添加到此帖子中。
编辑:编辑了一些附加信息和说明。
编辑:在下面的SQL代码中,我使用了JOINS并给了我正确的结果:
INSERT INTO DB1.Table1 (Col1, Col2, Col3, Col4, Col5)
SELECT DB1.Table2.Col1, DB1.Table3.Col2, DB2.Table2.Col8, DB2.Table2.Col9, DB2.Table2.Col10
FROM DB1.Table2
JOIN DB2.Table1 ON
Table2.Col11 = Table1.Col13 AND
Table2.Col12 = Table1.Col14,
DB1.Table3
Join DB2.Table2 ON
Table3.Col15 = Table2.Col16;