mysql - Foreach 字段中的数据将选定字段从一个数据库插入到 MySQL 中的另一个数据库
问题描述
我有两 (2) 个不同原理图的数据库,
db1从MSSQL 迁移到 MYSQL
和
db2从Laravel Migration创建。
这是挑战:db1 的表没有id
列(主键),这在 db2 表中很容易找到。所以我不断收到警告信息:
Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available.
所以我不得不在db1id
中的表上注入列
- 我需要从db1的stdlist中提取字段 [ level_name , class_name ] ,
- 在 db2 上创建级别 (id,level_name,X,Y)
- 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;
这是成功的。
现在,我需要使用id
levels 表中新创建的s 来填充classes表中的level_id列。为此,我必须重新运行上述选择原理图吗?有没有更好的方法可以将表列从db1.levels 连接到db2.stdlist并提取新插入示意图所需的字段。
我会很感激任何帮助。提前致谢。
解决方案
尝试为 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 列了。
推荐阅读
- xaml - 如何在 UWP 中的滚动查看器中设置滚动查看器
- r - stat_density2d 平铺几何图形在导出为 PDF 时显示网格
- java - 在达到特定请求阈值之前,Spring Boot 中的多个请求是否由单个线程处理?
- docker - 如何修复因一般错误而失败的 docker 服务?
- oracle - Oracle 12c 安装期间“无法为对象堆保留足够的空间”
- google-compute-engine - 查找 GCE 图像的图像路径
- android - 无法在 Android 中将 Facebook 原生应用程序与 Gigya Social Login 一起使用
- mongodb - 通过pyspark将数据帧插入mongodb时如何创建索引
- javascript - 想在表单提交后显示一条消息
- php - Profilegrid 登录/重置密码 anr 错误