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