mysql WHERE SET数据类型包含item

时间:2011-03-17 22:53:28

标签: mysql

我有一个表使用其中一个字段的SET数据类型,并检查该字段是否包含我使用的特定元素

SELECT * FROM table WHERE myset LIKE %value%;

这大部分时间都有效,但两个潜在值有相同的单词,即集合中的一个可能元素是Poodle,另一个是玩具贵宾犬。如果我做

SELECT * FROM table WHERE myset LIKE %Poodle%;

返回所有包含Poodle或Toy Poodle的行。如果该字段包含Poodle,我希望它只返回。如果我删除通配符,那么它将只返回只有Poodle的行。所以基本上,如果表是:

id | myset
-------------------------
1  | "Poodle"
2  | "Toy Poodle"
3  | "Poodle","Toy Poodle"
4  | "Toy Poodle","Poodle"

我需要一个返回1,3和4而不是2的select语句。这可能吗?

4 个答案:

答案 0 :(得分:11)

您需要执行:SELECT * FROM table WHERE FIND_IN_SET('Poodle',myset)>0

中所述的{{1}}

答案 1 :(得分:8)

如何使用FIND_IN_SET方法?

答案 2 :(得分:1)

SELECT * FROM table WHERE FIND_IN_SET( '"Poddle"', myset ) > 0

寻找"对于消除记录#2

非常重要

答案 3 :(得分:1)

抱歉,如果我完全忽略了这一点,但结果集中的引用是否实际存储在数据库中?

我的意思是,第一行的实际值是否等于......

"Poodle"

...或者您刚刚引用这些值用于演示目的,在这种情况下,第一个值实际上是......

Poodle

我唯一的理由是,为什么不做一个像...这样的查询。

SELECT * FROM table WHERE myset LIKE '%"Poodle"%';

如果我已经大量错过了这一点,或者超出了认可点,那么我会道歉。

无论如何,祝你好运!