Mysql IN的用法

时间:2011-01-13 11:13:06

标签: mysql sql

我在列中存储了以逗号分隔的类别ID列表:

像这样:1,2,3,4,5,6,7,8 ..等等,只是他们的ID。

然后我正在进行查询以获取具有ID为2,3的类别的所有行,并且当包列表中的项目很少时它会起作用。

这是查询和表格:

mysql> select *  from packages where category_id IN (2,3);

获取包含ctegory id为2或3的完整软件包列表的任何解决方案。

2 个答案:

答案 0 :(得分:0)

这应该回答你的问题:

select * from packages where category_id LIKE "2" or category_id LIKE "3";

但是,您最好对数据进行非规范化。

答案 1 :(得分:0)

反规范化的坏主意

您应该规范化数据

的一种可能解决方案
mysql> create table the_in ( expr varchar(255));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into the_in values('1,2');
Query OK, 1 row affected (0.00 sec)

mysql> create table some_table ( id int(10));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into some_table values (1), (2), (3), (4);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from some_table 
where find_in_set(id, (select expr from the_in));
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (0.00 sec)

find_in_set - 要注意效果