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

テーブル名が「test」の場合

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