给出如下形式的mysql查询:
SELECT *
FROM table
WHERE field1 LIKE '%foo%'
OR field2 LIKE '%bar%'
OR field3 LIKE '%foobar%'哪种方式是标记“匹配字段”的最佳方式?
例如:
+----+--------+--------+----------+
| 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)
谢谢
发布于 2018-11-20 04:51:42
可以使用条件将标志添加到select中,例如:
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:
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%'发布于 2018-11-20 04:48:57
CASE表达式如何:
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
如果您只想匹配子字符串,请使用以下命令:
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发布于 2018-11-20 05:40:30
使用 CONCAT和CASE
您正在寻找以下结果,但我知道您希望用逗号或任何其他符号分隔字段,因为我现在无法访问mysql,所以我认为您可以自己处理
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%'输出
ID field1 field2 field3 macthed_column
1 foo xxx xxx field1
2 xxx 12bar21 xxfoobarxx field2field3
3 f2o bar yxz field2https://stackoverflow.com/questions/53386368
复制相似问题