2012-11-09 82 views
2

不確定如何正確提問,因此我會嘗試將其可視化。我有2列可以說一個是名稱和名稱重複(幾個約翰幾盧克斯等)。另一列是幾乎所有的語言,但只有少數(法語,西班牙語,英語等)。基本上,每個人都可以有多種語言。將1列非唯一值與另一列非唯一值進行比較

我試圖找出是否給了一個名字,我可以確定哪些其他人與所有的語言原來的人是相關的。所以Mark的例子就是法語和西班牙語。利用這一點,我會試着弄清楚還有誰知道法文和西班牙文。所以如果傑勒米知道法語,西班牙語和德語,他會在結果中出現。

任何想法?

到目前爲止,我有

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

你可以精確的SQL風格? –

+0

它在Oracle內如此SQL Plus,但我寧願保持它儘可能基本,所以我寧願不要任何PL SQL – SalmonMode

+0

你有什麼能夠唯一標識每個用戶嗎?這可以做,但沒有它的結果將是無用的。 – itsbruce

回答

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 | 
+0

的簡單例子。謝謝!現在來思考它,並弄清楚如何 – SalmonMode