MySQL - 在查询中有两个选项,一个是'必须'而另一个是'可选'?

时间:2012-10-16 11:09:47

标签: mysql

为问题标题道歉,如果有人能够更好地解释它,请编辑。 我有一个MySQL select语句(我正在通过Perl dbi运行),如下所示:

select skills from my_table where (skills like '%maths%' or skills like '%english%');

这会运行,但它会选择“数学”或“英语”等技能。 我想拥有它所以它肯定会发现'数学',如果有意义的话可能会发现'英语'。

我认为有点像你有and,它只返回带有这些元素的结果。所以,如果我做了:

select skills from my_table where (skills like '%maths%' and skills like '%english%');

它会以两种技能返回结果。

所以我想要的是两个sqls的组合,如果可能的话,'maths'是一个明确的发现,'english'是可选的。我希望我已经正确地解释了这一点......任何帮助表示赞赏!

编辑:好吧,也许我需要澄清......如果有'英语'的选项我希望它被找到,但如果没有,我希望它仍然选择'数学'的选项,但如果没有'数学'选项,那么我希望它什么也不返回。所以它不只是一个或另一个。

4 个答案:

答案 0 :(得分:1)

I would like to have it so it definitely finds 'maths', and maybe finds 'english' if that makes sense.如果有意义,你的意思是什么。

我认为您只需要执行以下操作

select skills from my_table where (skills like '%maths%')

答案 1 :(得分:1)

但如果'英语是可选的',你可以简单地删除它:

select skills 
from my_table 
where skills like '%maths%'

答案 2 :(得分:1)

这将返回具有数学技能的所有行的keyField,以及显示他们是否也具备英语技能的附加列。

select   keyField,  
        'Maths' mathsSkill,
        CASE WHEN skills LIKE '%english%' THEN 'English' else 'No English' END englishSkill
from    my_table 
where   skills like '%maths%'

答案 3 :(得分:0)

试试

select skills from my_table where skills like '%maths%';

这将给出带数学的记录..由于英语是可选的,你不需要提供它