大半夜起来想想这个sql语句的写法,大伙帮我看一下有没有可能用sql写得出来~~比如:
只有一字段第一条记录: a,b,c,d,e,f //字符串用,号格开
第二条记录: 3,4,5,6,d,8
第三条记录: 11,12,13,14,c,8
第四条记录: 21,22,23,24,25,8我想搜出含有"a"或者含有"8"的记录,上面四条都符合条件输出.但我想要的结果是输出:第一条记录,第二条记录,第三条记录第四条记录之所以没有输出,是因为第一条记录中的:a,b,c,d,e,f 没有一个在第四条记录里面.因为第一条记录中有个d与第二条记录也有个d,又因为第一条记录有个c与第三条记录也有个c. 所以符合条件输出.请问这条sql语句怎么写?可以写得出来吗?还是要靠程序来判断?
只有一字段第一条记录: a,b,c,d,e,f //字符串用,号格开
第二条记录: 3,4,5,6,d,8
第三条记录: 11,12,13,14,c,8
第四条记录: 21,22,23,24,25,8我想搜出含有"a"或者含有"8"的记录,上面四条都符合条件输出.但我想要的结果是输出:第一条记录,第二条记录,第三条记录第四条记录之所以没有输出,是因为第一条记录中的:a,b,c,d,e,f 没有一个在第四条记录里面.因为第一条记录中有个d与第二条记录也有个d,又因为第一条记录有个c与第三条记录也有个c. 所以符合条件输出.请问这条sql语句怎么写?可以写得出来吗?还是要靠程序来判断?
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> create table t2 (
-> id int not null auto_increment primary key ,
-> c1 varchar(50)
-> );
Query OK, 0 rows affected (0.11 sec)mysql> insert into t2(c1) values
-> ('a,b,c,d,e,f'),
-> ('3,4,5,6,d,8'),
-> ('11,12,13,14,c,8'),
-> ('21,22,23,24,25,8');
Query OK, 4 rows affected (0.05 sec)
Records: 4 Duplicates: 0 Warnings: 0mysql> select c1 from t2
-> where (c1 like '%a%' or c1 like '%8%')
-> and concat(',',c1,',') regexp concat(',[',replace((select c1 from t2 wher
e c1 like '%a%' or c1 like '%8%' limit 1),',','|'),'],');
+-----------------+
| c1 |
+-----------------+
| a,b,c,d,e,f |
| 3,4,5,6,d,8 |
| 11,12,13,14,c,8 |
+-----------------+
3 rows in set (0.00 sec)
SELECT *,CONCAT(',',FF,',') FROM TTZF
WHERE CONCAT(',',FF,',') REGEXP ',a,|,8,'第四条记录之所以没有输出,是因为第一条记录中的:a,b,c,d,e,f 没有一个在第四条记录里面.
只判断第一条记录?
select * from ttzf where
concat(',',ff,',') regexpconcat(',',
replace((SELECT ff FROM TTZF
WHERE CONCAT(',',FF,',') REGEXP ',a,|,8,'
limit 1),',','|'),',')
这样是实现准确匹配
这种形式
like '%a%' or like '%8%'
有问题
谢谢大家,acmain 这很好,就是这样只针对第一行进行判断.
0,2,5,88,9,6,3
f,d,g,e,r,t,ef,gg,ad
这样的数据也被选上了,显然不是题所要求
用select c1 from t2 where concat(',',c1,',') like '%,a,%' or concat(',',c1,',') like '%,8,%'会解决此问题
select c1 from t2 where concat(',',c1,',') like '%,a,%' or concat(',',c1,',') like '%,8,%' 来解决。 或者更方便的用FIND_IN_SET()函数。
concat(',',replace((SELECT ff FROM TTZF
WHERE CONCAT(',',FF,',') REGEXP ',a,|,8,'
limit 1),',','|'),',')