【发布时间】:2016-06-01 14:28:26
【问题描述】:
我有一个表 Mechanic,其中包含类似的行
MechName 机械技能
A Bike Repair
A Car Repair
B Bike Repair
B Car Repair
B Oil Change
C Oil Change
需要其他餐桌技能
技能
Bike Repair
Oil Change
Car Repair.
需要编写一个查询来获取具有 SkillsRequired 表中列出的所有技能的机械师的所有姓名。
答:只有 B 必须出现在结果中,因为只有 B 具备所需的全部 3 项技能。 PS:对涉及 groupby 和 counts 的解决方案有一个想法,但这可能并不完全正确。
感谢@inquisitive_mind 提供以下解决方案。但是我们可以用不同的方式来表述吗?我需要另一个完全符合以下查询的查询。
select MechName from Skills a join Mechanic b
on a.Skills = b.MechSkill
group by Mechname
having count(MechSkill) = (select count(*) from Skills)
【问题讨论】:
-
这是 MySQL 还是 SQL Server?它们不是一回事。
-
我当然希望您的真实表不要在两个表中都存储这些字符串。
-
@Rabbit 这是用于 SQL Server 的
-
@SeanLange 它们确实存储在 2 个不同的表中
-
您可以考虑阅读规范化。将这样的文本存储在多个表中是很痛苦的。考虑当您必须更改技能的描述时会发生什么。您还必须在引用它的所有其他表中更新它,这违背了关系数据的目的。
标签: mysql sql sql-server sql-server-2008