【问题标题】:SQL In() with Wildcard Operators For MULTIPLE COLUMNS带有通配符运算符的 SQL In() 用于多列
【发布时间】:2022-01-17 19:56:38
【问题描述】:

我需要在表格的多列中搜索文本。现在我有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 会很快让人感到困惑。

由于 Stackoverflow 迫使我解释这个问题与 Can I use wildcards in "IN" MySQL statement? 有何不同: 链接的问题仅涵盖多个搜索文本选项,我需要多个列选项。我不知道如何为我的案例使用链接问题的答案。我试过了,还是不行。

【问题讨论】:

  • @diiN__________ 不,因为那篇文章侧重于多个搜索文本选项,我需要多个列选项。我不知道如何使用那篇文章的答案来满足我的需要。不过,谢谢!
  • @Shadow 谢谢!这个有效

标签: mysql sql mariadb wildcard


【解决方案1】:

你可以用分隔符连接它们。

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%'
);

dbfiddle here

上的演示

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多