我正在尝试编写一种方法,该方法将在人员的sql数据库中进行搜索并返回与搜索输入匹配的人员。问题是搜索由使用多个关系表的多个过滤器组成。
例如,假设我有一个名为People的表和两个表Skills and Preferences(很多与People的关系),我想返回一组具有某些技能和偏好的人。筛选这些表的最有效方法是什么?
给出一个实际的例子:
让我们说这样建立数据库:
People
Id, Name
1, Person1
2, Person2
3, Person3
4 Person4
Skills
Id, Person_Id, Skill_Name
1, 1 , Basketball
2, 1 , Tennis
3, 3 , Basketball
4, 4 , Soccer
Preferences
Id, Person_Id, Preference
1, 1 , Hot
2, 1 , Light
3, 2 , Dark
4, 3 , Cold
5, 4 , Warm
并且我想返回所有具有篮球技能并且也有喜好和轻度偏好的人的列表(在这种情况下,只有第一个人),用通用的方式来做这件事最有效的方法是什么?] >
我正在尝试找到一种有效的方法来实现这一点,我可以想到一些方法,但是它们似乎对于该问题是不好的解决方案,因为在实践中,可能会有很多关系表,但我不希望这样做需要很多时间来返回列表。
我将很感谢任何在该领域的经验。
我正在尝试编写一种方法,该方法将在人员的sql数据库中进行搜索并返回与搜索输入匹配的人员。问题是搜索由多个过滤器组成,这些过滤器......>
对于每种情况,一个方法就是exists
:
select p.*
from people p
where exists (select 1
from skills s
where s.person_id = p.id and
s.skill_name = 'Basketball'
) and
exists (select 1
from preferences pf
where pf.person_id = p.id and
pf.preference_name = 'Hot'
) and
exists (select 1
from preferences pf
where pf.person_id = p.id and
pf.preference_name = 'Light'
) ;