我喜欢反转这个查询:
SELECT * FROM table WHERE status IN ( option,option1,option2 );
在像这样的查询中
SELECT * FROM table WHERE status contains ( 'option' );
其中字段“状态”列包含(通过示例):“选项,选项 1”。
当我使用
SELECT * FROM table WHERE status LIKE '%option%' );
它还选择具有仅包含 'option1' 的 'status' 列的行
这可能吗?
示例数据:
id,name,status
1,'test1','option,option1'
2,'test2','option,option2'
3,'test3','option2'
4,'test4','option2,option3'
5,'test5','option'
SELECT * FROM table WHERE status contains ( 'option' );
此查询应选择选择记录 1,2 和 5。
“状态”字段类型是 varchar。
问题是状态字段包含几乎相似的数据,除了添加到选项的数字。当然,这是一个虚构的例子,但真实的东西有这种参数。
更新: 在秋葵的建议下终于找到了。
我首先尝试了 Gumbo 的铅(添加了 > 0):
SELECT * FROM table
WHERE FIND_IN_SET('option', status) > 0;
但它也没有奏效。
经过一番摆弄后,我发现罪魁祸首是状态字段中选项之间的空格。这些记录是从另一个来源导入的,并在逗号后带有空格:
'option, option1' 而不是 'option,option1'
所以我最终得到:
SELECT * FROM table
WHERE FIND_IN_SET('option', TRIM(REPLACE(status,' ',''))) > 0;
这对我有用。