mysql - 连接多个列然后拆分它们 - MySQL

标签 mysql split concatenation

这实际上是我需要的一个两步过程。我有一个包含 26 列的表,如下所示:

ColumnA   ColumnB   ColumnC  ColumnD  ColumnE  ColumnF

winter       0        0      summer   0        Dog

0          spring    fall      0      0        0

0            0        0      summer   car      0

我需要能够将列中的所有单词合并到一列中,并用 | 分隔。但在其他列中遗漏任何零。第一行应如下所示,位于第 27 列winter|summer|dog。然后,我需要能够将第 27 列 winter|summer|dog 中的结果分成第 28 列 Winter、第 29 列 Summer、第 20 列 Dog

结果如下所示:

Column28    Column29    Column30

winter      summer      dog

spring      fall

summer      car

我正在使用的程序不允许我使用通配符,因此我需要将 26 列转储为 3 列,因为 26 列中的任何一行中最多包含三个单词。我有 750,000 行,搜索要花很长时间。

可能有一种更简单的方法,只需将任何列中第一个非 0 的实例移动到第 28 列,将行中第二个非 0 的实例移动到第 29 列,等等。我还有一堆其他列在我上面发布的 26 列(例如姓名、电话等)之前,您应该注意这些,因为您不能在第 27 列连续说第一个非零。

最佳答案

(我会将其作为答案而不是评论发布,因为我认为它非常重要)

针对这个问题以及您今年必须编写的其他 27 个令人讨厌的查询,唯一可持续的解决方案是更好的数据库设计。

您应该仔细阅读的概念称为“database normalization”,它教您一种在一组规则和模式中对域进行建模的方法,这些规则和模式为您提供灵活的存储(相对)免于陷入以下陷阱:像你的 OP 中那样的设计(即只有 10% 有用数据的行,甚至更少的列,彻底改变可用工具以实现任何有用的事情)。

这些概念可能看起来令人难以抗拒(例如,the book that got me started 是 976 页),但作为原则,它们的演示起来非常简单。为此,我将其留给维基百科作为一个不错的起点。

基本上,我们有一个“范式”系统,有点像数据库设计的“进度级别”。第一个(“第一范式”是术语)本身就会为您想要如何处理该数据创造奇迹,并且本质上让您思考这一点:我用这张表建模的单个原子事物是什么?

我通常会在这里提供一个小例子,但维基百科是如此易于访问,我相信您会很容易地开始从他们关于 first normal form 的文章中吸收内容.

那么,您当然会对second感兴趣。和 third正常形式。就市场趋势而言,这就是 yield 递减的点(即几年后回归更高形式)。但是,我要重申,如果您扎实地学习了如何在建模领域中实现第一范式,您的生活会好得多:-)

一旦建立了这一点,您将需要快速温习 SQL 的 JOIN 概念,因为这些规则本质上将您的域分解为原子 block ,并且您的许多任务将开始需要简单的加入您的查询。

祝你好运!

关于mysql - 连接多个列然后拆分它们 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12224814/

相关文章:

mysql - 选择没有特定值(value)的项目

php - 连接名称并再次使用 concat 作为用户名?

php - 我应该如何在 phpmyadmin 中导入一个巨大的表

php - 使用 PHP 和 MYSQL 创建登录脚本

IE7 中的 javascript 拆分正则表达式错误

c - 使用 strtok 在 C 中拆分字符串

MySQL 触发连接字符串

MYSQL 连接时的情况

mysql - 子查询在 WordPress 中返回多行

c# - 分割字符串并获得所需的部分