一个相当简单的SQL问题

sto*_*low 2 sql

表结构:

Table: People

| Name | Skill1     | Skill2     | Skill3     | Skill4     | Skill5     |
| Tom  | Cooking    | Cleaning   | Eating     |            |            | 
| Jane | Typing     | Cooking    | Sleeping   | Flirting   |            |
| John | Tennis     |            |            |            |            |
Run Code Online (Sandbox Code Playgroud)

没有技能的地方,它只是NULL.出于某种原因,我使用以下SQL得到0结果:

select Name from People
where Skill1 or Skill2 or Skill3 or Skill4 or Skill5 = 'Cooking';
Run Code Online (Sandbox Code Playgroud)

我希望看到汤姆和简......但我没有,我做错了什么?

Ste*_*ger 7

最短的语法可能是这个:

select Name 
from People 
where 'Cooking' IN (
  Skill1,
  Skill2,
  Skill3,
  Skill4,
  Skill5);
Run Code Online (Sandbox Code Playgroud)


cjk*_*cjk 5

您需要每个子句都是完整的测试:

select Name from People 
where Skill1 = 'Cooking'
or Skill2 = 'Cooking'
or Skill3 = 'Cooking'
or Skill4 = 'Cooking'
or Skill5 = 'Cooking'; 
Run Code Online (Sandbox Code Playgroud)

where每个or之间必须有一个完整的布尔测试.在您的脚本中,您只是调用列,这取决于您使用的SQL版本将具有不同的结果.

SQL Server给出了这个:

消息4145,级别15,状态1,行1在预期条件的上下文中指定的非布尔类型的表达式,在"OR"附近.