将1列非唯一值与另一列非唯一值进行比较

时间:2012-11-09 11:00:44

标签: sql

不确定如何正确地询问它,所以我会尝试将其可视化。我有2列,让我们说一个是名字,名字重复(一对夫妇约翰斯几个卢克斯等)。另一栏几乎是语言,但只有少数(法语,西班牙语,英语等)。基本上,每个人都可以拥有多种语言。

我试图找出是否有名字,我能否确定哪些其他人与原始人的所有语言相关联。马克知道法语和西班牙语就是一个例子。使用它,我会试着弄清楚还有谁知道法语和西班牙语。因此,如果杰里米知道法语,西班牙语和德语,他就会出现在结果中。

有什么想法吗?

到目前为止我已经

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

1 个答案:

答案 0 :(得分:1)

您希望relational division想要提醒。

SQL Fiddle

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 |