是否可以在SQL中匹配以下这些键的组合?
关键值如数组和分隔符='/'。
Key
-----
A/B/C
A
B
C
A/B
A/C
B/C
答案 0 :(得分:1)
我首先想到的是你需要重新设计。您不应该以这种方式存储数据。你应该有一个相关的表。然后你可以做普通的连接来得到你想要的东西。数据库设计的规则1是每个字段仅存储一条信息。如果您发现需要将其分解为比存储更小的块,则存储不正确。
一些提议的解决方案将起作用(取决于你真正要求的哪些不清楚)但是大多数(如果不是全部)它们将会很慢,因为它们依赖于不会使你使用索引的语法。这是指示重新设计的一个主要原因。您不希望系统无法使用索引。
答案 1 :(得分:0)
假设您的密钥是单个字母,如示例所示,您可以使用LIKE:
SELECT * FROM table WHERE key LIKE '%A%'
会为您提供“key”包含“A”的所有值。
答案 2 :(得分:0)
SELECT *
FROM mytable
WHERE `key` REGEXP '^([ABC]/)*[ABC]?$'
这将匹配上面的任何内容,但如果有其他字母(例如D/B/C
或AA/BB/CC
)
答案 3 :(得分:0)
最好使用REGEXP
SELECT * FROM table WHERE key REGEXP '[[:<:]]A[[:>:]]'
[[:&lt ;:]]和[[:&gt;:]]标记一个单词边界,这将停止'A'匹配AB,AC,AD 我不确定它们是否是特定于mysql的
答案 4 :(得分:0)
什么数据库?
使用其中任何一个来测试大于零的值。
SELECT t.*
FROM TABLE t
WHERE INSTR(t.column, expectedValue) > 0
答案 5 :(得分:0)
你没有说清楚你的问题。我认为这个键列表在概念上是重复排序的集合,并且您想要找到所有可能的子集/超集组合(例如,我认为您希望'A / C'“匹配”'A / B / C')。
这似乎有效,但我很难证明逻辑是正确的:
SELECT a.key subset, b.key superset
FROM key_list a, key_list b
WHERE '/' || REPLACE( b.key, '/', '//') || '/'
LIKE '/' || REPLACE( a.key, '/', '/%/' ) || '/'
OR b.key LIKE '%' || a.key || '%'
ORDER BY length(a.key), a.key, length(b.key),b.key