我有一个人与这个人知道的语言表。例如避免选择与子选择
Name Language
John Engl ish
Bill English
John German
Bill Japanese
Li Chinese
我想选择所有懂英语和德语的人。 简单的方法是做到这一点:
select name from persons p where
exists (select 1
from persons pp
where pp.name=p.name
and pp.language="English")
AND
exists (select 1 from persons pp
where pp.name=p.name
and pp.language="English")
的请求复杂度为N^2; 但是,如果我需要选择所有知道英语,德语和俄语的人,该怎么办?我会有复杂的n^3。等等.. 有没有更快的方法来做到这一点?
以您目前的表格,由@rid答案是一个很好的解决方案,但在实践中,你应该有3张桌子,其中一张桌子上有人,一张桌子上有语言,一张桌子可以告诉你哪个人说哪种语言。当你有两个叫约翰的人的时候,我很好奇你打算在当前的桌子上做什么。 – GolezTrol