SQL In() 和用于多列的通配符运算符
SQL In() with Wildcard Operators For MULTIPLE COLUMNS
我需要在 table 的多个栏中搜索文本。现在我有 WHERE 'text' in (col1, col2, col3, col4)
,但我需要向文本中添加通配符运算符,因为它应该可以找到包含任何这些列中任何位置的文本的任何结果。
我可以使用 WHERE col1 LIKE '%text%' OR col2 LIKE '%text%' OR col3 LIKE '%text%' OR col4 LIKE '%text'
,但我想知道是否有任何方法可以将通配符运算符与 in()
或任何其他方法一起使用,因为使用大量 OR
可以快速变得混乱。
因为 Whosebug 迫使我解释这个问题与 Can I use wildcards in "IN" MySQL statement? 有何不同:
链接的问题仅涵盖多个搜索文本选项,我需要多个列选项。我不知道如何为我的案例使用链接问题的答案。我试过了,没用。
你可以用分隔符连接它们。
SELECT *
FROM your_table
WHERE CONCAT_WS('|', col1, col2, col3, col4) LIKE '%text%'
在 MySql 8 中,也可以为此使用 EXISTS
SELECT *
FROM your_table t
WHERE EXISTS (
select 1
from (
select t.col1 as col union all
select t.col2 union all
select t.col3 union all
select t.col4
) q
where col LIKE '%text%'
);
演示 db<>fiddle here
我需要在 table 的多个栏中搜索文本。现在我有 WHERE 'text' in (col1, col2, col3, col4)
,但我需要向文本中添加通配符运算符,因为它应该可以找到包含任何这些列中任何位置的文本的任何结果。
我可以使用 WHERE col1 LIKE '%text%' OR col2 LIKE '%text%' OR col3 LIKE '%text%' OR col4 LIKE '%text'
,但我想知道是否有任何方法可以将通配符运算符与 in()
或任何其他方法一起使用,因为使用大量 OR
可以快速变得混乱。
因为 Whosebug 迫使我解释这个问题与 Can I use wildcards in "IN" MySQL statement? 有何不同: 链接的问题仅涵盖多个搜索文本选项,我需要多个列选项。我不知道如何为我的案例使用链接问题的答案。我试过了,没用。
你可以用分隔符连接它们。
SELECT *
FROM your_table
WHERE CONCAT_WS('|', col1, col2, col3, col4) LIKE '%text%'
在 MySql 8 中,也可以为此使用 EXISTS
SELECT *
FROM your_table t
WHERE EXISTS (
select 1
from (
select t.col1 as col union all
select t.col2 union all
select t.col3 union all
select t.col4
) q
where col LIKE '%text%'
);
演示 db<>fiddle here