0

我有一张这样的桌子:

id  |  value1  | value2
-------------------------
1   | a,b,c,d  | a,d,e,f
-------------------------
2   | d,e,f,a  | 
-------------------------
3   | a,x,y,z  | d,e,f

如何获取所有在 [value1] 中具有“a”但在 [value2] 中没有“a”的行?应该是这样的:

2   | d,e,f,a  | 
-------------------------
3   | a,x,y,z  | d,e,f

提前致谢!

4

3 回答 3

1

您应该考虑规范化,并且永远不要将数据存储为逗号分隔的字符串。但是,在这种情况下,您可以使用find_in_set,这从长远来看效率不高。因此,当您对数据进行规范化时(假设您会这样做),同时您可以使用以下内容。

mysql> select find_in_set('a','a,b,c,d') as pos ;
+-----+
| pos |
+-----+
|   1 |
+-----+
1 row in set (0.02 sec)

mysql> select find_in_set('a','d,e,f') as pos ;
+-----+
| pos |
+-----+
|   0 |
+-----+
1 row in set (0.00 sec)

所以查询变成

select * from table_name
where
find_in_set('a',value1) > 0 
and find_in_set('a',value2) = 0 
于 2015-05-13T10:15:36.227 回答
0

试试这个查询:

SELECT *
FROM `table`
WHERE `value1` LIKE '%a%'
AND `value2` NOT LIKE '%a%'
于 2015-05-13T10:19:33.223 回答
0

如果表名是“测试”

select * from test where value1 like '%a%' and value2 not like '%a%';
于 2015-05-13T11:44:08.130 回答