mysql WHERE SET 数据类型包含项目

问题描述 投票:0回答:4

我有一个表,其中一个字段使用 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 语句。这可能吗?

mysql
4个回答
17
投票

你需要做:

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

...如文档

中所述

9
投票

使用 FIND_IN_SET 方法怎么样?


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

寻找

"
对于消除记录 #2 非常重要


1
投票

抱歉,如果我完全错过了这里的要点,但是结果集中的引用实际上存储在数据库中吗?

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

"Poodle"

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

Poodle

我问的唯一原因是,为什么不直接做一个查询......

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

如果我严重遗漏了要点或过于简化以致超出了人们的认知范围,我深表歉意。

无论如何,祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.