我有一个Redshift表列,其中包含1到许多主题标签(例如#a,#b等)。我想编写一个查询,查找给定集合中所有标签都存在的行(例如#a和#b),而不选择具有某些但不是全部标签的其他行(例如,仅#a或仅#b)
我可以看到如何使用多个LIKE语句(例如LIKE'%#a%'和LIKE'%#b%')来执行此操作,但我真的很想使用单个语句来执行此操作。我可以看到如何使用SIMILAR TO做到这一点,但不能忽略订购的方式。仅当我包括所有可能的订购组合时,以下内容才有效。
SELECT * FROM table WHERE field SIMILAR TO '(%#a%)(%#b%)|(%#b%)(%#a%)'
这可行,但是必须列出我要查找的所有标签组合,这会非常麻烦并且容易出错。有没有一种方法可以在Redshift中使用SIMLAR TO(或其他函数)来表达“ AND”而忽略顺序?
答案 0 :(得分:1)
请确保在任何位置捕获整个标签,并且与不完整的标签不匹配:
SELECT *
FROM table
WHERE (field LIKE '#a#%' OR field LIKE '%#a') AND
(field LIKE '#b#%' OR field LIKE '%#b')
这避免了匹配诸如#ac#b
答案 1 :(得分:0)
使用AND
和LIKE
:
SELECT t.*
FROM table t
WHERE field LIKE '%#a%' AND
field LIKE '%#b%';