SQL Select 其中包含 IN 列
SQL Select where column IN inclusive
我有两个table个人和技能。
Person:
PersonID: AutoNumber
PersonName: String
Skill:
SkillID: AutoNumber
SkillName: String
我有一个连接table:
PersonSkills
PersonID: Number (FK to Person.PersonID)
SkillID: Number (FK to Skill.SkillID)
我在人物中有两行table
PersonID PersonName
1 Bob
2 John
技能中四行table
SkillID SkillName
1 English
2 French
3 Math
4 Science
并且连接 table 有
PersonID SkillID
1 1 (Bob - English)
1 3 (Bob - Math)
1 4 (Bob - Science)
2 2 (John - French)
2 3 (John - Science)
我想获得所有拥有英语、数学和科学技能(包括)的人的列表。一个标准的select
SELECT Person.PersonName, Skill.SkillName
FROM Person left outer join PersonSkills on Person.PersonID =
PersonSkills.PersonID left outer join on Skills on PersonSkills.SkillID =
Skills.SkillID
where Skill.SkillName in ('English','Math','Science')
将检索 Bob 和 John。
如何获得所有三种技能都存在的唯一结果?
按人汇总,然后断言每个匹配的人都具备所有技能:
SELECT p.PersonName
FROM Person p
INNER JOIN PersonSkills ps ON p.PersonID = ps.PersonID
INNER JOIN Skills s ON ps.SkillID = s.SkillID
WHERE s.SkillName IN ('English', 'Math', 'Science')
GROUP BY p.PersonName
HAVING COUNT(DISTINCT s.SkillName) = 3;
你需要 having
子句。此外,始终建议为您的 table 提供别名,而不是在列前使用整个 table 名称。
select
p.PersonName,
s.SkillName
from Person p
left outer join PersonSkills ps
on p.PersonID = ps.PersonID
left outer join Skills s
on ps.SkillID = s.SkillID
where s.SkillName in ('English','Math','Science')
group by
p.PersonName, s.SkillName
having count(distinct s.SkillName) = 3
我有两个table个人和技能。
Person:
PersonID: AutoNumber
PersonName: String
Skill:
SkillID: AutoNumber
SkillName: String
我有一个连接table:
PersonSkills
PersonID: Number (FK to Person.PersonID)
SkillID: Number (FK to Skill.SkillID)
我在人物中有两行table
PersonID PersonName
1 Bob
2 John
技能中四行table
SkillID SkillName
1 English
2 French
3 Math
4 Science
并且连接 table 有
PersonID SkillID
1 1 (Bob - English)
1 3 (Bob - Math)
1 4 (Bob - Science)
2 2 (John - French)
2 3 (John - Science)
我想获得所有拥有英语、数学和科学技能(包括)的人的列表。一个标准的select
SELECT Person.PersonName, Skill.SkillName
FROM Person left outer join PersonSkills on Person.PersonID =
PersonSkills.PersonID left outer join on Skills on PersonSkills.SkillID =
Skills.SkillID
where Skill.SkillName in ('English','Math','Science')
将检索 Bob 和 John。
如何获得所有三种技能都存在的唯一结果?
按人汇总,然后断言每个匹配的人都具备所有技能:
SELECT p.PersonName
FROM Person p
INNER JOIN PersonSkills ps ON p.PersonID = ps.PersonID
INNER JOIN Skills s ON ps.SkillID = s.SkillID
WHERE s.SkillName IN ('English', 'Math', 'Science')
GROUP BY p.PersonName
HAVING COUNT(DISTINCT s.SkillName) = 3;
你需要 having
子句。此外,始终建议为您的 table 提供别名,而不是在列前使用整个 table 名称。
select
p.PersonName,
s.SkillName
from Person p
left outer join PersonSkills ps
on p.PersonID = ps.PersonID
left outer join Skills s
on ps.SkillID = s.SkillID
where s.SkillName in ('English','Math','Science')
group by
p.PersonName, s.SkillName
having count(distinct s.SkillName) = 3