2011-03-17 32 views
6

我有一个使用了一组数据类型中的一个字段,并检查该字段包含我用MySQL的WHERE 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" 

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

回答

11

你需要做的:SELECT * FROM table WHERE FIND_IN_SET('Poodle',myset)>0documentation

+0

不知道我是怎么忽略的......现在感觉有点愚蠢。那是我得到的信息使用LIKE%...%,只是不知何故错过了我现在知道的FIND_IN_SET部分 – awestover89 2011-03-17 23:04:09

+0

。很高兴在我的大脑数据库中添加另一组知识 – reignsly 2018-02-09 01:42:04

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

寻找"描述将是重要的,以消除记录#2

0

对不起,如果我在这里完全错过了点,但却是你的结果集中的引号实际存储在数据库中?

我的意思是,做的第一排相同的实际价值...

"Poodle" 

...或者你刚才引用,以用于演示这些值,在这种情况下,第一值实际上是...

Poodle 

唯一原因,我想问的是,为什么不只是做一个查询像...

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

鸭如果我已经大量地忽略了这一点,或者超越了承认的过度简化的话。

不管怎么样,祝你好运!

+1

不,报价不存储在数据库中我只是用它们在问题中进行表示以表示每个都是单独的可能值 – awestover89 2011-03-17 23:09:54

+0

因此实际的id 2字符串是贵宾犬,玩具狮子狗 – BizNuge 2011-03-17 23:42:08