SQL:返回多表连接中仅第一个表的唯一条目

时间:2012-02-22 00:18:50

标签: sql

我对sql相对较新,所以这可能只是一个简单的问题。

我有3张桌子A,B,C B具有FK至A,并且C具有FK至B. 我想得到A中所有不同的条目,其中B中的条目对应于C中的条目。我目前有JOIN:

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 个答案:

答案 0 :(得分:3)

替换

SELECT DISTINCT * 

SELECT DISTINCT p.*

答案 1 :(得分:1)

SELECT DISTINCT p.*
FROM Peoples p
...

答案 2 :(得分: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
                  )
        )
;

这清楚地表明了查询的确在做什么:它找到了那些已经签发合同的人,并且对这些合同或审计不感兴趣。