2

不知道如何正确地询问它,所以我会尝试将其可视化。我有 2 列,可以说一个是名称,并且名称重复(几个 Johns 和几个 Lukes 等)。另一列几乎是语言,但只有少数(法语、西班牙语、英语等)。基本上,每个人都可以有多种语言。

我试图找出如果给定一个名字,我可以确定哪些其他人与原始人的所有语言相关联。例如,马克知道法语和西班牙语。使用它,我会尝试找出还有谁会法语和西班牙语。因此,如果 Jeremy 懂法语、西班牙语和德语,他就会出现在结果中。

有任何想法吗?

到目前为止我有

accept nameIn prompt 'Search for:'
select name from sc16temp intersect (select lang from sc16temp where name='&nameIn');
4

1 回答 1

1

看起来你想要带有提醒的关系划分。

SQL小提琴

Oracle 11g R2 模式设置

create table YourTable
(
  Name varchar(10),
  Lang varchar(10),
  primary key (Name, Lang)
);

insert into YourTable values('John', 'English');
insert into YourTable values('John', 'French');
insert into YourTable values('John', 'Spanish');
insert into YourTable values('John', 'Swedish');

insert into YourTable values('Mark', 'English');
insert into YourTable values('Mark', 'French');
insert into YourTable values('Mark', 'Spanish');

insert into YourTable values('Peter', 'English');
insert into YourTable values('Peter', 'French');

查询 1

select T1.Name
from YourTable T1
  inner join YourTable T2
    on T1.Lang = T2.Lang
where T2.Name = 'Mark'
group by T1.Name
having count(T1.Lang) = (select count(Lang) 
                         from YourTable 
                         where Name = 'Mark')

结果

| NAME |
--------
| John |
| Mark |
于 2012-11-09T12:40:03.160 回答