首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql查询,多个哪里的条件,哪个字段匹配?

Mysql查询,多个哪里的条件,哪个字段匹配?
EN

Stack Overflow用户
提问于 2018-11-20 04:43:03
回答 3查看 89关注 0票数 0

给出如下形式的mysql查询:

代码语言:javascript
复制
SELECT *
FROM table
WHERE field1 LIKE '%foo%'
    OR field2 LIKE '%bar%'
    OR field3 LIKE '%foobar%'

哪种方式是标记“匹配字段”的最佳方式?

例如:

代码语言:javascript
复制
+----+--------+--------+----------+
| ID | field1 | field2 |  field3  |
+----+--------+--------+----------+
| 01 |   foo  |   xxx  |    xxx   |
+----+--------+--------+----------+
| 02 |   xxx  |12bar21 |xxfoobarxx|
+----+--------+--------+----------+
| 03 |   f2o  |   bar  |    yxz   |
+----+--------+--------+----------+

在这里,每一个记录都会被匹配--现在我想知道每个记录匹配的字段。(所以对于ID 01是field1,对于ID 02是field2,field3,对于ID 03是field2)

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-20 04:51:42

可以使用条件将标志添加到select中,例如:

代码语言:javascript
复制
SELECT *,
    IF(field1 LIKE '%foo%', 1, 0) AS field1_matches,
    IF(field2 LIKE '%bar%', 1, 0) AS field2_matches,
    IF(field3 LIKE '%foobar%', 1, 0) AS field3_matches
FROM TABLE
WHERE field1 LIKE '%foo%'
    OR field2 LIKE '%bar%'
    OR field3 LIKE '%foobar%'

如果需要将单个字段中的结果作为逗号分隔列表,则可以使用CONCAT_WS连接结果,并在没有匹配时在条件内返回NULL

代码语言:javascript
复制
SELECT *,
    CONCAT_WS(',',
        IF(field1 LIKE '%foo%', 'field1', NULL),
        IF(field2 LIKE '%bar%', 'field2', NULL),
        IF(field3 LIKE '%foobar%', 'field3', NULL)
    ) AS matches
FROM TABLE
WHERE field1 LIKE '%foo%'
    OR field2 LIKE '%bar%'
    OR field3 LIKE '%foobar%'
票数 1
EN

Stack Overflow用户

发布于 2018-11-20 04:48:57

CASE表达式如何:

代码语言:javascript
复制
SELECT
    CASE WHEN field1 REGEXP '[[:<:]]foo[[:>:]]|[[:<:]]bar[[:>:]]|[[:<:]]foobar[[:>:]]'
         THEN 'field1' ELSE '' END AS field1match,
    CASE WHEN field2 REGEXP '[[:<:]]foo[[:>:]]|[[:<:]]bar[[:>:]]|[[:<:]]foobar[[:>:]]'
         THEN 'field2' ELSE '' END AS field2match,
    CASE WHEN field3 REGEXP '[[:<:]]foo[[:>:]]|[[:<:]]bar[[:>:]]|[[:<:]]foobar[[:>:]]'
         THEN 'field3' ELSE '' END AS field3match
FROM yourTable

Demo

如果您只想匹配子字符串,请使用以下命令:

代码语言:javascript
复制
SELECT
    CASE WHEN field1 REGEXP 'foo|bar|foobar'
         THEN 'field1' ELSE '' END AS field1match,
    CASE WHEN field2 REGEXP 'foo|bar|foobar'
         THEN 'field2' ELSE '' END AS field2match,
    CASE WHEN field3 REGEXP 'foo|bar|foobar'
         THEN 'field3' ELSE '' END AS field3match
FROM yourTable
票数 0
EN

Stack Overflow用户

发布于 2018-11-20 05:40:30

使用 CONCATCASE

您正在寻找以下结果,但我知道您希望用逗号或任何其他符号分隔字段,因为我现在无法访问mysql,所以我认为您可以自己处理

代码语言:javascript
复制
SELECT *,
    CONCAT(CASE WHEN field1 LIKE '%foo%' THEN 'field1' ELSE NULL END,
            CASE WHEN field2 LIKE '%bar%' THEN 'field2' ELSE NULL END,
            CASE WHEN field3 LIKE '%foobar%' THEN 'field3' ELSE NULL END) AS macthed_column
FROM youtable
WHERE field1 LIKE '%foo%'
    OR field2 LIKE '%bar%'
    OR field3 LIKE '%foobar%'

输出

代码语言:javascript
复制
ID  field1  field2  field3      macthed_column
1   foo     xxx     xxx         field1
2   xxx     12bar21 xxfoobarxx  field2field3
3   f2o     bar     yxz         field2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53386368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档