我有一个表,其中一个字段使用 SET 数据类型,并检查该字段是否包含我使用的特定元素
SELECT * FROM table WHERE myset LIKE %value%;
这在大多数情况下都有效,但是两个潜在值具有相同的单词,即集合中的一个可能元素是 Poodle,另一个是 Toy 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 语句。这可能吗?
使用 FIND_IN_SET 方法怎么样?
SELECT * FROM table WHERE FIND_IN_SET( '"Poddle"', myset ) > 0
寻找
"
对于消除记录 #2 非常重要
抱歉,如果我完全错过了这里的要点,但是结果集中的引用实际上存储在数据库中吗?
我的意思是,第一行的实际值是否等于...
"Poodle"
...或者您只是为了演示目的而引用这些值,在这种情况下,第一个值实际上是...
Poodle
我问的唯一原因是,为什么不直接做一个查询......
SELECT * FROM table WHERE myset LIKE '%"Poodle"%';
如果我严重遗漏了要点或过于简化以致超出了人们的认知范围,我深表歉意。
无论如何,祝你好运!