针对SET类型的MYSQL列运行SQL SELECT语句

时间:2014-03-07 02:49:50

标签: mysql sql

我正在尝试针对类型为SET的列运行SQL SELECT语句。该表名为myTablemyTable中的列称为base_propsnamesbase_props列的类型为SET。 base_prop中的值为vbntcntpossloc。所以我想从“名称”列中选择条目,其中base_props包含值vbposs。我希望得到的结果可能只有vbposs以外的值。所以要明确我想要选择具有值vbposs的所有条目,无论它们是否还有其他值。我尝试了以下SQL查询,但无法获得所需的结果。

SELECT name from myTable WHERE base_props = 'vb' AND base_props = 'poss'

该查询返回一个空结果集。我尝试过使用FIND_IN_SET()IN(),但我无法使用它。我之前编写过SQL语句,但从不必处理类型为SET的列。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

我唯一能想到的就是使用LIKE关键字:

SELECT name FROM myTable WHERE (base_props LIKE '%vb%' AND base_props LIKE '%poss%');

这将确保vb和cnt都在base_props列中。当然你可以在那里使用cnt,nt和loc,或者在sql中使用任意数量的base_props值,只需添加更多AND语句。

或者作为samitha指出的删除答案,你可以使用FIND_IN_SET:

SELECT name from myTable WHERE FIND_IN_SET('vb', base_props) AND FIND_IN_SET('poss', base_props);

评论(由 spencer7593 ):“这两项工作都有效,但有一点点差别.LIKE运算符实际上会匹配任何包含搜索字符串的成员在一个术语中; FIND_IN_SET函数只匹配一个确切的成员。它也可以使用MySQL BITAND运算符按照它们在SET定义中出现的顺序搜索集合中的成员:例如,匹配第一个和第四个成员集合:WHERE base_props& 1 AND base_props& 8“。例如,如果您的集合中有'a'和'aaa',那么使用LIKE "%a%"方法也会返回包含'aaa'的行。

结论:使用FIND_IN_SET解决方案,因为它适用于所有情况。

答案 1 :(得分:0)

FIND_IN_SET返回索引,试试这个

SELECT name from myTable WHERE FIND_IN_SET(base_props, 'vb') > 0 AND 
FIND_IN_SET(base_props, 'poss') > 0