MySQL数据库遇到不规范建表问题解决方案

简介:

需要建立的关联表如上图所示。

问题发现:

好,问题来了,大伙儿请看:我们的organizations表中的Industry字段居然存储了两个IndustryName,这就很恶心了,就需要我们进行拆分和去重后放到Industry表中,完成Industry表后再使用关联查询找到我们的IndustryID。

解决方案:

CREATE TABLE organization_2 LIKE organizations;
INSERT INTO organization_2 SELECT * FROM organizations;

我们创建一个新的表organization_2,copy organizations的所有数据。(去掉之前为organizationID创建的主键)然后使用SUBSTRING_INDEX函数将所有 ‘ / ’ 后的数据放到表尾:

INSERT INTO organization_2 (OrganizationID, Industry)
SELECT OrganizationID, SUBSTRING_INDEX(Industry, '/', -1)FROM organization_2
WHERE Industry LIKE '%/%';

删除organization_2表中 ‘ / ’ 后所有数据

UPDATE organization_2 SET Industry = SUBSTRING_INDEX(industry, '/', 1)
WHERE Industry LIKE '%/%';

此时我们可以得到Industry字段,我们直接插入到Industry表中

insert into industry(IndustryName)
select Industry from organization_2

注意:这里不在赘述建表,可以在最初建立Industry表时创建一个无自增主键的表,只包含IndustryName。

去重与roles表一样,采用外套子查询(建立临时表)方法:

DELETE FROM industry
WHERE IndustryID NOT IN (SELECT min_id FROM (SELECT MIN(IndustryID) AS min_idFROM industryGROUP BY IndustryName) AS tmp
);

在organization_2中新建一个IndustryID字段:

alter table organization_2 add industryID int;

由于此时我们的organization_2表已经具有了Industry所需要的所有的两个字段,所以我们只需要简单的使用一个联表UPDATE就可以为IndustryID赋值。

UPDATE organization_2 o INNER JOIN Industry iON o.Industry = i.IndustryNameSET o.industryID = i.industryID;

最后将数据插入关联表,即可:        

INSERT INTO organizationindustry (organizationid, industryid)
SELECT OrganizationID, IndustryID
FROM organization_2;

注意:

这只是我的解法,字段类型设置,字段名可能不与你一样,思路仅供参考,sql语句自用需要根据自身表结构进行修改,直接抄是跑不了的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278874.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精选硬件连通性测试工具:企业如何做出明智选择

在当今数字化的商业环境中,企业的硬件连通性至关重要。选择适用的硬件连通性测试工具是确保网络和设备协同工作的关键一步。本文将探讨企业在选择硬件连通性测试工具时应考虑的关键因素,以帮助其做出明智的决策。 1. 功能全面性:首要考虑因素…

L1-047:装睡

题目描述 你永远叫不醒一个装睡的人 —— 但是通过分析一个人的呼吸频率和脉搏,你可以发现谁在装睡!医生告诉我们,正常人睡眠时的呼吸频率是每分钟15-20次,脉搏是每分钟50-70次。下面给定一系列人的呼吸频率与脉搏,请你…

Notes Domino 14.0正式版发布

大家好,才是真的好。 经过12个月的等待,经过三个Beta版本的迭代,昨天晚上11:00,Notes Domino 14.0版本正式发布! 过去半年,经过我们对三个Beta版本不断的测试和介绍,一些新功能可能大家已经了…

【Spring】06 生命周期之销毁回调

文章目录 1. 回调是什么2. 销毁回调2.1 实现 DisposableBean 接口2.2 配置 destroy-method 3. 执行顺序4. 应用场景总结 在 Spring 框架中,生命周期回调(Lifecycle Callbacks)是一种强大的机制,它允许我们在 Spring 容器中的 Bean…

【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)

文章目录 题目C代码详解 题目 在二叉树T中,其度为1的结点是指某结点只有左孩子或只有右孩子。利用递归方法求二叉树T的度为1的结点个数。 1)如果TNULL,则是空树,度为1的结点个数为0,返回值为0; 2&#xff0…

我的NPI项目之Android 安全系列 -- 先认识一下ST33Jxxx

目前接触过的高通平台都没有集成单独的SE,安全运行环境都是高通自家的TEE,又言Trustzone。高通Keystore功能也是依赖TEE来实现的。那么,如果另外集成SE,那么高通的Keystore如何集成?TEE部分要如何配置? 最近…

银河麒麟本地软件源配置方法

软件源介绍 软件源可以理解为软件仓库,当需要安装软件时则会根据源配置去相应的软件源下载软件包,此方法的优点是可以自动解决软件包的依赖关系。常见的软件源有光盘源、硬盘源、FTP源、HTTP源,本文档主要介绍本地软件源的配置方法&#xff…

前端框架的虚拟DOM(Virtual DOM)

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

智能API代码示例生成工具AiRestful

智能API代码示例生成工具AiRestful 一、产品介绍二、如何使用1、第一步(必须):2、第二步(可选):3、第三步(智能生成): 三、如何集成到您的网站(应用)1、开始接入2、接入案例 四、注意点 一、产品介绍 AiRestful是一款基于智能AI的,帮助小白快速生成任意编程语言的API接口调用示…

[robot_state_publisher-3] Error: Error document empty.

出现这个问题,我这里遇到的是:指定的urdf文件路径无效,而产生这个的根本原因是没有在CMakelists.txt中添加如下代码: install( DIRECTORY urdf DESTINATION share/${PROJECT_NAME} )把urdf文件夹添加到指定的share/${PROJEC…

【Linux】free命令使用

free命令 ​free是指查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。 作者 作者:Brian Edmonds。 语法 free [参数] free 命令 -Linux手册页 命令选项及作用 执行令 &am…

beebox靶场A1 low 命令注入通关教程(上)

一:html注入 get HTML注入,就是当用户进行输入时,服务器没有对用户输入的数据进行过滤或转义,导致所有输入均被返回前端,网页解析器会将这些数据当作html代码进行解析,这就导致一些恶意代码会被正常执行。 首先进行简…