2012-02-22 63 views
0

我對sql比較新,所以這可能會成爲一個簡單的問題。SQL:返回多表中第一個表的唯一條目加入

我有3個臺A,B,C B具有FK到A,和C具有FK到B 我想獲得所述的具有在B中對應於一個條目的所有不同的條目C目前有:

SELECT DISTINCT * 
FROM Peoples p 
INNER JOIN Contracts c 
ON p.pkey=c.person_pkey 
JOIN audits a ON c.contract_pkey=a.contract_issued_for; 

因此,這返回與審計所有人(與重複)的列表。我如何得到它,以便將所有表的返回列放在一起,而不是所有屬於表人物的列都是唯一條目?

在此先感謝!

回答

3

更換

SELECT DISTINCT * 

SELECT DISTINCT p.* 
+0

非常簡單。謝謝! – Ace 2012-02-22 16:52:24

1
SELECT DISTINCT p.* 
FROM Peoples p 
... 
1

到您的查詢的最小變化是改變*p.*。不過,我認爲更好的辦法是使用IN條款,而不是JOIN S:

SELECT * 
    FROM Peoples 
WHERE pkey IN 
     (SELECT person_pkey 
      FROM Contracts 
      WHERE contract_pkey IN 
        (SELECT contract_issued_for 
         FROM audits 
       ) 
     ) 
; 

這使得清楚的查詢是真的做的:它找到誰擁有合同是審計已爲發行人,而不是否則對這些合同或審計感興趣。

+0

@downvoter:謹慎解釋? – ruakh 2012-02-22 00:33:29

+0

+1。不知道爲什麼這是downvoted。 – muratgu 2012-02-22 00:33:45

相關問題