【问题标题】:sql: select query for values separated by commas in different orders [closed]sql:选择查询以不同顺序用逗号分隔的值[关闭]
【发布时间】:2020-02-14 06:12:05
【问题描述】:

我有一个表,其中有一列的值用逗号分隔。

例如 Column 具有以下值:

index Column
1     X,Y,Z,A,B,C,D,E,F,G,H,I,J,K,L,M,T,W,O
2     Y,Z,G,H,I,J,K,L,M,T,E,W,O
3     X,Y,Z,F,G,H,I,L,M,T,W,O,A,B,C,D,E,J,K
4     A,Z,B,X,Y
5     X,Y,A,Z,B

我想打印具有 X,Y,Z,A,B,C,D,E,F,G,H,I,J,K,L,M,T,W,O 的列的数据只有这样才能成为索引号 1 和 3,因为它们具有相同的值,只是顺序不同。无法手动搜索所有值,因为如果搜索查询的要求更改为 X、Y、A、Z、B,那么它必须是索引号 4 和 5。 我怎么做?。谢谢!

【问题讨论】:

  • 你使用什么数据库?
  • 如果可以的话,请重新打开这个问题并帮助@RachanaGandhi
  • 表是关系型反模式,你考虑过索引列值行的表吗?此外,如果列是 DB 列并在行中对其值进行赋值,那么这很可能是更大的有时是反模式 EAV 的一部分。
  • 为什么它会有意义地更大?与目前相比,它会有一些重复。但这种设计正是关系型 DBMS 的用途。使用正确的设计。 PS您当前的带有有序索引的设计和上面的链接不一定会创建一个大的中间表。您还可以交叉应用或以其他方式使用从一行返回表的函数中的表。还要了解 SQL 中的关系划分。 PS您目前对您想要的内容的描述非常不清楚。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。

标签: sql sql-server tsql sql-server-2017


【解决方案1】:

只需明确搜索值

SELECT *
FROM Table
WHERE Column IN ('X,Y', 'Y,X')

如果您有前导或滞后空格,您可以用空格替换空白字符串,以确保可以找到完全匹配的内容。此外,如果您的列从大写变为小写,您可以使用UPPER 进行转换。将这两者结合起来应该可以确保您获得匹配

【讨论】:

  • 但这只是一个例子。我的真实列包含大于 20 的值,以逗号分隔。我无法手动检查所有可能的组合
  • 嗨@RachanaGandhi 然后举一个更好的例子......对我来说这是投票。
  • 所以你的例子不能代表你的实际问题,这意味着你需要给出你给我们的数据。 帮助我们帮助您。投票结束,因为问题没有解决实际问题
【解决方案2】:

您可以使用 like('%X%') 子句两次来过滤。

你的条件应该是这种格式;

 {col} like ('%X%') and {col} like('%Y%')

【讨论】:

  • 这也会拉出 OP 不想要的第 4 列
  • @undearboy 不完全确定我是如何做到这一点的 - 我将我的答案更新为我打算提出的建议
  • 这不会给任何东西。它会返回 'X,Y' 和 'Y,X' 是的,但它也会返回 'X,Y,Z' 或任意数量的字母与 X 和 Y 的组合。这对于第一个示例或第二个示例都不好.
猜你喜欢
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多