不确定如何正确地询问它,所以我会尝试将其可视化。我有2列,让我们说一个是名字,名字重复(一对夫妇约翰斯几个卢克斯等)。另一栏几乎是语言,但只有少数(法语,西班牙语,英语等)。基本上,每个人都可以拥有多种语言。
我试图找出是否有名字,我能否确定哪些其他人与原始人的所有语言相关联。马克知道法语和西班牙语就是一个例子。使用它,我会试着弄清楚还有谁知道法语和西班牙语。因此,如果杰里米知道法语,西班牙语和德语,他就会出现在结果中。
有什么想法吗?
到目前为止我已经
了accept nameIn prompt 'Search for:'
select name from sc16temp intersect (select lang from sc16temp where name='&nameIn');
答案 0 :(得分:1)
您希望relational division想要提醒。
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')
<强> Results 强>:
| NAME |
--------
| John |
| Mark |