表格结构:
Table: People
| Name | Skill1 | Skill2 | Skill3 | Skill4 | Skill5 |
| Tom | Cooking | Cleaning | Eating | | |
| Jane | Typing | Cooking | Sleeping | Flirting | |
| John | Tennis | | | | |
在没有技能的情况下,它只是NULL。 出于某种原因,我使用以下SQL得到0结果:
select Name from People
where Skill1 or Skill2 or Skill3 or Skill4 or Skill5 = 'Cooking';
我希望看到汤姆和简......但我没有,我做错了什么?
答案 0 :(得分:7)
最短的语法可能就是这个:
select Name
from People
where 'Cooking' IN (
Skill1,
Skill2,
Skill3,
Skill4,
Skill5);
答案 1 :(得分:5)
您需要对每个条款进行全面测试:
select Name from People
where Skill1 = 'Cooking'
or Skill2 = 'Cooking'
or Skill3 = 'Cooking'
or Skill4 = 'Cooking'
or Skill5 = 'Cooking';
在where
和每个or
之间必须有一个完整的布尔测试。在您的脚本中,您只是调用该列,这取决于您使用的SQL版本将产生不同的结果。
SQL Server提供了这个:
Msg 4145,Level 15,State 1,Line 1 An 表达非布尔类型 在上下文中指定的 条件是预期的,靠近'OR'。
答案 2 :(得分:4)
or
无法按预期工作。试试这样:
select Name from People
where Skill1 = 'Cooking' or Skill2 = 'Cooking' or Skill3 = 'Cooking'or Skill4 = 'Cooking' or Skill5 = 'Cooking';
此外,如果您发现自己创建了包含相同类型数据的多个列,例如SkillX
列,则需要创建一个额外的表。在您的情况下,制作一个表Skills
。 Skills
应包含Name
,引用People
表和1 Skill
列。对于一个人拥有Skills
的每项技能应该包含一行。从SkillX
表中删除People
列,因为这些列现已过时。