【问题标题】:Intersect two columns of the same table with lists/STUFF将同一表的两列与列表/STUFF 相交
【发布时间】:2022-06-20 04:12:09
【问题描述】:

我在sql server中创建了一个结构如下的表:

id pertinent procedure
1 13271,13272,513008,513009 13200,13271,19353,21101,21105,21140
2 18236 18235,19290,19749,21102,21105,21140

我想在pertinent和procedure之间做一个交集,结果如下:

id pertinent procedure procedures pertinents
1 13271,13272,513008,513009 13200,13271,19353,21101,21105,21140 13271
2 18236 18235,19290,19749,21102,21105,21140 NULL

但我还没有弄清楚如何在 sql 中迭代或拆分它,有什么想法吗?提前谢谢你。

【问题讨论】:

  • 您使用的是哪个版本的 SQL Server?
  • 如果你有一个标准化的设计,这将是微不足道的......为什么不修复你的设计?
  • @squillman 是 12.0.6118.4
  • @Larnu,这是他们需要的设计。所以对我来说不是微不足道的。
  • 只要从数据库中提取一些数据很复杂,这几乎总是表明设计缺乏规范化。在这种情况下,它通过在单个元组中存储多个值违反了 1NF。这使得这种事情变得比它需要的更困难。

标签: sql sql-server sql-server-2014 intersect


【解决方案1】:

第一步是将数据库规范化为 1NF,每个元组有一个值。然后你会有两张表,一张称为相关的,有 5 行,一张称为过程,有 12 行。之后,在这些表之间使用 JOIN 的简单 SELECT 语句就足够了,从而产生所需的结果。

正如其他人所提到的,在这个相当旧版本的 SQL Server 中,在此表上执行此操作会非常困难。由于模式规范化可能是最好的,因此同时对数据库进行现代化改造可能是一个不错的选择。一些流行的选择是 Postgres 和 Snowflake,我个人最喜欢的是 SingleStore。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多