相关疑难解决方法(0)

MySQL中GROUP_CONCAT的反义词是什么?

我似乎反对这个问题很多,我的数据格式如下:

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)

但我希望它的格式如下:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?什么是这种操作甚至叫做?

mysql csv format pivot group-concat

28
推荐指数
2
解决办法
2万
查看次数

如何在关系数据库中最好地存储数字列表?

我想在关系数据库中存储一个数字列表(基本上是数学术语中的一),特别是SQL Server 2005.

理想情况下,我希望它是给定表上的单个列,但我愿意听到任何解决方案.我需要存储的数据就像我说的那样,是一组数字.

  • 它不需要是顺序的(即间隙是正常的,正常的,典型的)
  • 范围是可能的(即1 - 4),但我想以这种方式显示它我可以使用快捷方式,如存储它
  • 它也可以是"全部",因此对于这种"无限"情况,必须保留至少一个值,最好是逻辑上
  • 数字列表不需要按顺序排列(即3,2,9,5),但最好也是完全合理的,它们将在插入之前进行排序,因为只有代码才会进行插入,而不是手动用户.不过,它可能不应该依赖或期望列表已经排序.
  • 一组数字应该可以轻松搜索到一个子集(见下文)
  • 所有数字都应该是不同的(没有欺骗),但这可以并且将在插入之前强制执行

此列用于存储该行适用的给定进程的所有"步骤编号".因此,每行可以以任何顺序,范围或顺序应用于一个或多个步骤.可能的最大步数(最大范围,基本上)在行与行之间是不同的,但我高度怀疑它们中的任何一个都会达到数百个,因此在99.9%的情况下,最大值不应超过20或30,而我如果有任何接近100的话,我会感到惊讶.每一行都保证最少有一个值(步骤)(即没有任何步骤适用于任何步骤没有意义),但我想象这就像设置列一样简单not null.

然而,它存储,我希望它很容易搜索.例如,我宁愿不必通过大量的箍来编写SQL查询来查找适用于"步骤3"的所有行.如果给定的行有几个适用的步骤(例如,2,3,7和8),则在步骤3搜索时匹配它应该不太困难.

此外,虽然我希望在查看原始数据时能够产生某种逻辑意义(对于任何需要在系统上工作的人,我不在后问,因此他们不必阅读厚文档弄清楚我的模糊编码),我愿意妥协.因此,将列表编码成可以被可靠解码的内容是可接受的.

如果这是一个骗局我道歉 - 我一直在谷歌搜索,但我怀疑我的这个问题不知道要搜索什么或如何短语或称之为找到我正在寻找的东西.

在更多的注释中,我想知道这不是关系数据库不足的领域之一.不幸的是,我在这里没有选择.我必须将它存储在SQL Server中.我担心,单独保存到文件或其他持久性数据存储是不可能的.

database-design types

9
推荐指数
1
解决办法
5724
查看次数

表格规范化(将逗号分隔的字段解析为单个记录)

我有这样一张桌子:

设备

DeviceId   Parts

1          Part1, Part2, Part3
2          Part2, Part3, Part4
3          Part1
Run Code Online (Sandbox Code Playgroud)

我想创建一个表'Parts',将Parts栏中的数据导出到新表中.之后我将删除Parts列

预期结果

部分

PartId PartName

  1      Part1
  2      Part2
  3      Part3
  4      Part4
Run Code Online (Sandbox Code Playgroud)

DevicePart

DeviceId PartId

  1      1
  1      2
  1      3
  2      2
  2      3
  2      4
  3      1
Run Code Online (Sandbox Code Playgroud)

我可以在不使用游标的情况下在SQL Server 2008中执行此操作吗?

sql t-sql sql-server database-design sql-server-2008

5
推荐指数
1
解决办法
1931
查看次数

在列中匹配逗号分隔值

如果我有一个名为"Categories" science,maths,english的列,如下所示,以逗号分隔的行显示,如何匹配包含类别的所有行maths

我尝试过一个简单的LIKE但是不太准确,因为搜索时可能会有'poo_science' '%science%'会匹配两者.

我查看了StackOverflow并且有很多类似的问题但是所有人似乎都希望将数据作为逗号分隔列表或其他东西返回 - 这不是我所追求的.

我不想使用存储过程,也不能使用全文搜索.我有一个我使用的存储过程,('$')在每个值周围添加了另一个字符,然后搜索'$value$'...这是太讨厌了吗?我采用了一种更简单的方法.

sql sql-server csv comma

3
推荐指数
2
解决办法
2万
查看次数