2012-02-22 5 views
0

SQLについては比較的新しいので、これはおそらく簡単な質問から外れる可能性があります。SQL:マルチテーブルの最初のテーブルのみのユニークなエントリを返します。

私は3つのテーブルA、B、Cを持っています BはFKをAに、CはFKをBにしました Bのエントリを持つAのすべての別個のエントリを取得したいと思います。 JOINsでは、私は現在、以下を持っています:

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

クエリへの最小限の変更がp.**を変更するだろう

SELECT DISTINCT p.* 
+0

すごくシンプルです。ありがとう! – Ace

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

SELECT DISTINCT * 

を交換してください。それは、監査がために発行されている契約を持っている人を見つけることだ、とではありません:これは、クエリが実際にやっている明確なものを作る

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

:しかし、私はより良いアプローチがIN句ではなくJOIN Sを使用することだと思いますそうでなければそれらの契約や監査に関心がある。

+0

@downvoter:気をつけて説明しますか? – ruakh

+0

+1。これがなぜ落とされたのか分かりません。 – muratgu

関連する問題