Mysql 在多个SQL列中查找一个值

Mysql 在多个SQL列中查找一个值,mysql,sql,database,Mysql,Sql,Database,我想在我的表的多个列中搜索一个值。 我在做 从myTableName中选择*,其中'value'位于(第1列、第2列、第3列) 这对我来说很有用,但我不想让你喜欢。大概是这样的: 从myTableName中选择*如(第1列、第2列、第3列)中的“%value%” 因为我正在制作一个浏览器,所以我需要使用类似的工具 我犯了一个错误,我不知道怎样才能把它做好 有人知道什么吗?你可以试着用或和一样而不是中的和一样 SELECT * FROM myTableName WHERE column

我想在我的表的多个列中搜索一个值。 我在做

从myTableName中选择*,其中'value'位于(第1列、第2列、第3列)

这对我来说很有用,但我不想让你喜欢。大概是这样的:

从myTableName中选择*如(第1列、第2列、第3列)中的“%value%”

因为我正在制作一个浏览器,所以我需要使用类似的工具

我犯了一个错误,我不知道怎样才能把它做好


有人知道什么吗?

你可以试着用
一样
而不是
中的
一样

SELECT *
FROM myTableName 
WHERE 
    column1 LIKE '%value%'
OR
    column2 LIKE '%value%'
OR
    column3 LIKE '%value%'
注意


如果您需要搜索,我会将
column1、column2、column3
存储在一列中,因为一列中只有一个
LIKE
比您使用多个列的性能更高。

使用PostgreSQL时,有:

其中,subselect只返回一列数据

select @q := concat('select * from Table1 ',
                   'where concat(', group_concat(column_name), ', "") like ?'
                   )
from information_schema.columns c
where table_name = 'Table1';

set @p = '%augusto%';

prepare st from @q;
execute st using @p;

deallocate prepare st;

参考:

您可以将三种类似的模式与
一起使用:

WHERE column1 LIKE '%value%' OR
      column2 LIKE '%value%' OR
      column3 LIKE '%value%' 
但是,这很麻烦,因为您必须多次重复该模式。在MySQL的最新版本中,有一种变通方法:

where exists (select 1
              from (select t.column1 as val union all
                    select t.column2 as val union all
                    select t.column3 as val
                   ) x
              where x.val like '%value%'
             )
这在旧版本的MySQL中不起作用,因为不支持双嵌套关联


(例如。)

每列需要一个LIKE。但我宁愿问自己为什么要搜索3列。设计问题?使用
其中CONCAT_WS(@delimiter,column1,column2,column3)像“%value%”
其中
@delimiter
是列值中不存在的字符(例如,
字符(0)
)。这等于
其中column1类似于“%value%”或column2类似于“%value%”或column3类似于“%value%”
,但比单独测试要慢。但是OP的MySQL表中有3列。OP怎么能用这个?
WHERE column1 LIKE '%value%' OR
      column2 LIKE '%value%' OR
      column3 LIKE '%value%' 
where exists (select 1
              from (select t.column1 as val union all
                    select t.column2 as val union all
                    select t.column3 as val
                   ) x
              where x.val like '%value%'
             )