【问题标题】:Is there a way to express AND in SIMILAR TO ignoring order of matches?有没有办法以类似于忽略匹配顺序的方式表达 AND?
【发布时间】: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(或其他函数)中表达“与”而忽略顺序?

【问题讨论】:

标签: sql regex amazon-redshift


【解决方案1】:

确保在任何位置捕获整个标签,并且不匹配不完整的标签:

SELECT *
FROM table
WHERE (field LIKE '#a#%' OR field LIKE '%#a') AND
      (field LIKE '#b#%' OR field LIKE '%#b')

这样可以避免匹配数据,例如#ac#b

【讨论】:

    【解决方案2】:

    使用ANDLIKE

    SELECT t.*
    FROM table t
    WHERE field LIKE '%#a%' AND
          field LIKE '%#b%';
    

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 2010-10-11
      • 2019-02-11
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多