【发布时间】:2019-08-15 13:46:41
【问题描述】:
我有一个 Redshift 表列,其中包含 1 到多个主题标签(例如 #a、#b 等)。我想编写一个查询来查找给定集合中的所有标签都存在的行(例如#a和#b),而不选择具有一些但不是所有标签的其他行(例如只有#a或只有#b) .
我可以看到如何使用多个 LIKE 语句来做到这一点(例如 LIKE '%#a %' AND LIKE '%#b%'),但我真的很想用一个语句来做到这一点。我可以看到如何使用 SIMILAR TO 执行此操作,但不能忽略排序。以下方法可行,但前提是我包含所有可能的排序组合。
SELECT * FROM table WHERE field SIMILAR TO '(%#a%)(%#b%)|(%#b%)(%#a%)'
这可行,但必须列出我正在寻找的标签的所有组合将是一种皇家痛苦并且容易出错。有没有办法在 Redshift 中的 SIMLAR TO(或其他函数)中表达“与”而忽略顺序?
【问题讨论】:
-
请注意:
LIKE可能比正则表达式调用产生 better performance。由于 RedShift 使用 Postgres 的变体方言,请注意 PGSQL 大师 @Erwin 的建议:Never userSIMILAR TO. It's pointless.。
标签: sql regex amazon-redshift