【问题标题】:MySQL- Output an "other" column based on multiple columnsMySQL-基于多列输出“其他”列
【发布时间】:2019-03-21 20:33:33
【问题描述】:

我正在使用 MySQL REGEXP 将评论分配给不同的主题并将它们输出到单独的列中。问题是 - 一些评论可能不会分配给任何主题,这就是我需要“其他”列的原因。如何修改下面的查询来实现这一点?

SELECT 
text,
text REGEXP 'keywords' AND text REGEXP 'other keywords' AND .... AS Cleanliness,
text REGEXP 'keywords' AND text REGEXP 'other keywords' AND .... AS Restaurant,
text REGEXP 'keywords' AND text REGEXP 'other keywords' AND .... AS Wifi,
FROM review_table;

请注意,一条评论可以属于多个主题。 最终结果应如下所示:

【问题讨论】:

    标签: mysql sql regex database case


    【解决方案1】:

    一种解决方案是创建另一个 REGEXP 表达式,它表示所有其他表达式的否定。但维护起来很快就会变得乏味。

    另一种选择是仅包装查询并分析外部查询中的结果以生成附加列。这应该很简单:

    SELECT x.*, (Cleanliness + Food + Wifi = 0) AS Other
    FROM (
        --- original query
    ) x
    

    提示:在 MySQL 中,条件表达式的返回值是 1 成功时和 0 失败时。这意味着这个表达式:

    CASE 
        WHEN review REGEXP 'relevant keywords' 
            AND review REGEXP 'additional keywords if necessary' 
        THEN 1 
        ELSE 0 
    END AS 'Cleanliness'
    

    也可以写成:

    (
        review REGEXP 'relevant keywords' 
        AND review REGEXP 'additional keywords if necessary' 
    ) AS 'Cleanliness'
    

    【讨论】:

    • 我选择了第二个选项,它奏效了。感谢您的提示!
    【解决方案2】:

    我认为我们可以使用NOT(expression) 命令

        CASE 
            WHEN review NOT (REGEXP 'relevant keywords' 
                AND review REGEXP 'additional keywords if necessary' )
            THEN 1 
            ELSE 0 
        END AS 'Irrelevant' 
    

    参考:https://dev.mysql.com/doc/refman/5.7/en/regexp.html

    相关:negate regex pattern in mysql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 2013-06-08
      • 2017-10-26
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      相关资源
      最近更新 更多