2012-08-30 216 views
-1

我使用的是2個表SQL查詢而不使用子查詢

比方說,(還有更多的這些表,但是這是它只是一個非常簡單的視圖)

Table1 is 
sID ResearchPaperID 
1  A1 
2  A1 
3  A1 
4  A1 


Table2 is 
sID Name 
1  Person1 
2  Person2 
3  Person3 
4  Person4 

我需要做的是什麼找到與Person1的論文相關聯的人(合寫),但不在輸出中顯示Person1。

目前我有類似

SELECT Table2.sID, Table1.sID 
FROM Table2, Table1 
WHERE Table2.sID = Table1.sID 
AND Table2.Name = 'Person1' 

這將使我PERSON1所做的一切。

這是一門功課一直停留在其上的問題,而現在。

不能使用子查詢也是如此。 對不起,我應該提及不使用內連接,外連接,左/右連接,自然連接。

它不應該比上面我所只使用基本的命令更難..

[編輯] 輸出會是這樣的

ResearchPaperID Name 
A1     Person2 
A1     Person3 
A1     Person4 

我想找到的人是是person1的論文的共同作者,但不在輸出中顯示person1

+2

你如何判斷一個人合寫了一篇論文與他人? –

+0

表1的小島嶼發展中國家表明,多人寫了同樣的研究論文 – bigubosu

+0

你想要的輸出是什麼? – jaychapani

回答

1

解決方案,無需子查詢和JOIN的:

select distinct t3.sID, t3.ResearchPaperID 
from Table1 t1, Table2 t2, Table1 t3 
where t1.sID = t2.sID and t2.Name = 'Person1' 
    and t1.ResearchPaperID = t3.ResearchPaperID 
    and t3.sID <> t2.sID  -- this restriction is the one that removes the 'Person1' 
+0

是<>是一樣的!=?不太明白t1.ResearchPaperID = t3.ReasearchPaperID ..是不是隻是同一個表? – bigubosu

+0

是的,'<>'等於'!='。關於這兩張表,他們是同一張表。但't1'受't2'的'sID'限制,因此只有具有'1 A1'的行。我們需要另一個'Table1'('t3')來選擇所有具有相同'ResearchPaperID'但不同'sID'的行。正是你要求的。 –

+0

謝謝,它工作。你甚至走了一步,刪除重複的:)。必須記住關於創建第三張表 – bigubosu

1
SELECT * 
FROM Table1 t1 
INNER JOIN Table1 t2 ON t1.ResearchPaperID = t2.ResearchPaperID 
INNER JOIN Table2 t3 ON t1.SID = t2.SID 
WHERE t3.Name = 'Person1' 
+0

對不起,沒有內部聯接或外部連接,自然連接等,您可以使用那裏的東西= somethingelse – bigubosu

1

您需要弄清楚如何識別主要論文的作者,然後假設其他人都是共同作者。一旦你能做到這一點,你的SQL查詢將需要排除主要作者,但包括所有其他人。

+0

是的,我知道,但得到的是到SQL命令是另一回事.. – bigubosu

+0

對不起,但功課標籤的定義是: '這讓潛在的應答者知道自己應該引導學生解決問題,而不應簡單地顯示完整的answer' – Arj