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