我有一个表使用其中一个字段的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语句。这可能吗?
答案 0 :(得分:11)
您需要执行:SELECT * FROM table WHERE FIND_IN_SET('Poodle',myset)>0
答案 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"%';
如果我已经大量错过了这一点,或者超出了认可点,那么我会道歉。
无论如何,祝你好运!