首页 > 解决方案 > Foreach 字段中的数据将选定字段从一个数据库插入到 MySQL 中的另一个数据库

问题描述

我有两 (2) 个不同原理图的数据库,

db1MSSQL 迁移到 MYSQL

db2Laravel Migration创建。

这是挑战:db1 的表没有id列(主键),这在 db2 表中很容易找到。所以我不断收到警告信息:

 Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.

所以我不得不在db1id中的表上注入列

  1. 我需要从db1的stdlist中提取字段 [ level_name , class_name ] ,
  2. 在 db2 上创建级别 (id,level_name,X,Y)
  3. db2 上的类(id、class_name、level_id)

抛出更多亮点:level_id应该来自已经创建的级别

我已经使用以下代码段成功提取了第一个实例:

创建关卡的第一个查询

INSERT INTO db2.levels(level_name,X,Y)
SELECT class_name as level_name,1 as X,ClassAdmitted as Y
FROM db1.stdlist
GROUP BY ClassAdmitted;

这是成功的。

现在,我需要使用idlevels 表中新创建的s 来填充classes表中的level_id列。为此,我必须重新运行上述选择原理图吗?有没有更好的方法可以将表列从db1.levels 连接db2.stdlist并提取新插入示意图所需的字段。

我会很感激任何帮助。提前致谢。

标签: mysqlsqldatabase

解决方案


尝试为 Processed 添加一列,然后执行 while exists 循环

INSERT INTO db2.levels(level_name,X,Y)
SELECT class_name as level_name,1 as X,ClassAdmitted as Y, 0 as Processed
FROM db1.stdlist
GROUP BY ClassAdmitted;

WHILE EXISTS(SELECT * FROM db2.levels WHERE Processed = 0)
BEGIN 
DECLARE @level_name AS VARCHAR(MAX)
 SELECT TOP 1 @level_name=level_name FROM db2.levels WHERE Processed = 0
--YOUR CODE
UPDATE db2.levels SET Processed=1 WHERE level_name=@level_name

END

您可能需要先转储到临时表中,然后在完成处理后插入到您的真实表 (db2.levels) 中。那么你就不需要决赛桌上的 Unnecessary 列了。


推荐阅读