我对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;
因此,这将返回所有人员(带有重复项)的列表并进行审计。我如何得到它,而不是将所有表的返回列放在一起,而只是属于表人的所有列并且是唯一的条目?
提前致谢!
答案 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
)
)
;
这清楚地表明了查询的确在做什么:它找到了那些已经签发合同的人,并且对这些合同或审计不感兴趣。