【发布时间】:2012-12-26 16:03:52
【问题描述】:
我有如下表格。
create table tab1 (
id int, col1 varchar(20), col2 varchar(20),
col3 varchar(20), col4 varchar(20)
);
我在里面有值
insert into tab1 values
(1,'column011','column012','column013','column014'),
(2,'column021','column022','column023','column024'),
(3,'column031','column032','column033','column034'),
(4,'column041','column042','column043','column044')
;
之前我的要求是,查找行,其中任何列的数据为column011。所以我执行了下面的查询并得到了我想要的。
select * from tab1
WHERE 'column011' in (col1,col2,col3,col4);
我在上面使用了CONCAT_WS,因为它是简单的查询。
select * from tab1
where CONCAT_WS('-', col1, col2, col3, col4) LIKE '%column011%';
现在我的要求是,查找行,其中任何列包含数据为mn01。所以我执行了下面的查询并得到了我想要的。
select * from tab1
where CONCAT_WS('-', col1, col2, col3, col4) LIKE '%mn01%';
但是我想通过使用简单查询(第一个查询)来完成这项工作。所以我尝试了以下。
select * from tab1
WHERE '%mn01%' in (col1,col2,col3,col4);
有什么方法可以通过修改上述查询来做我想做的事吗? (最后一次查询)
Data at sqlfiddle
【问题讨论】:
-
可能是因为在这个涵盖每个主要 RDBMS 的确切问题上有数百个重复项?
-
@Ben :您提供的链接在我看来并不重复。你能再给我几个副本吗?