mysqlコマンドラインの下で、文字列間のカンマ区切り文字の少ないピットについて
2913 ワード
mysqlのピットに出会って、文字列の接続の問題について、分かち合います
元のテーブルデータ.
where条件を使用して、リスト内の列をクエリーします.(通常クエリー)
最後の値のセットに注意してください('pink''purple')の間にカンマが少なくなると、クエリの結果はデフォルトで'pinkpurple'文字列として解釈されます.
本来、これは文法の間違いを報告すべきで、しかし、、、、ああ、穴に落ちて、、、
mysql> select * from my_table;
+----+--------+------------+
| id | mod_id | mod_name |
+----+--------+------------+
| 1 | 20 | red |
| 2 | 20 | blue |
| 3 | 20 | pink |
| 4 | 21 | yellow |
| 5 | 21 | green |
| 6 | 21 | white |
| 7 | 21 | black |
| 8 | 30 | gray |
| 9 | 30 | purple |
| 10 | 30 | pinkpurple |
| 11 | 30 | red purple |
+----+--------+------------+
11 rows in set (0.00 sec)
元のテーブルデータ.
mysql> select * from my_table where mod_name in ("red", 'blue', 'pink', 'purple');
+----+--------+----------+
| id | mod_id | mod_name |
+----+--------+----------+
| 1 | 20 | red |
| 2 | 20 | blue |
| 3 | 20 | pink |
| 9 | 30 | purple |
+----+--------+----------+
4 rows in set (0.00 sec)
where条件を使用して、リスト内の列をクエリーします.(通常クエリー)
mysql> select * from my_table where mod_name in ("red", 'blue', 'pink' 'purple');
+----+--------+------------+
| id | mod_id | mod_name |
+----+--------+------------+
| 1 | 20 | red |
| 2 | 20 | blue |
| 10 | 30 | pinkpurple |
+----+--------+------------+
3 rows in set (0.00 sec)
最後の値のセットに注意してください('pink''purple')の間にカンマが少なくなると、クエリの結果はデフォルトで'pinkpurple'文字列として解釈されます.
mysql> select * from my_table where mod_name = ('pink' 'purple');
+----+--------+------------+
| id | mod_id | mod_name |
+----+--------+------------+
| 10 | 30 | pinkpurple |
+----+--------+------------+
1 row in set (0.00 sec)
= , 。
mysql> select * from my_table where mod_name = 'pink' 'purple';
+----+--------+------------+
| id | mod_id | mod_name |
+----+--------+------------+
| 10 | 30 | pinkpurple |
+----+--------+------------+
1 row in set (0.00 sec)
= , , 。
mysql> select * from my_table where mod_name = '' 'purple';
+----+--------+----------+
| id | mod_id | mod_name |
+----+--------+----------+
| 9 | 30 | purple |
+----+--------+----------+
1 row in set (0.00 sec)
0 , purple 。
mysql> select * from my_table where mod_name = 'red'' ' 'purple';
Empty set (0.00 sec)
, , 。。。。。
mysql> select * from my_table where mod_name = 'red' ' ' 'purple';
+----+--------+------------+
| id | mod_id | mod_name |
+----+--------+------------+
| 11 | 30 | red purple |
+----+--------+------------+
1 row in set (0.00 sec)
'red' ' ' 'purple' , , red purple 。
本来、これは文法の間違いを報告すべきで、しかし、、、、ああ、穴に落ちて、、、