SQL加入相同的表

时间:2012-11-01 11:51:41

标签: sql

select
  person.adresse,
  person.fornavn,
  person.postnr,
  COUNT(PERSON.personnr)
from 
  PERSON 
    inner join 
  POST
    on POST.postnr = PERSON.postnr
    inner join
  PERSON as P 
    on PERSON.adresse = P.adresse
group by 
  PERSON.adresse, 
  PERSON.fornavn,
  PERSON.postnr
having 
  COUNT(PERSON.personnr) > 1

Adresse = address,fornavn =名字 我需要显示人员的地址,名字和邮政编号,其中不止一个人居住在同一地址。我知道它与加入相同的表有关,但我似乎无法弄清楚加入哪些表是有意义的。

1 个答案:

答案 0 :(得分:0)

对您的查询进行直接修复是添加条件and PERSON.fornavn <> P.fornavn,以确保您加入同一地址的不同人员。然后你可以放弃COUNT,因为它会产生错误的结果。

select person.adresse, person.fornavn, person.postnr
from PERSON
join PERSON as P on PERSON.adresse = P.adresse and PERSON.fornavn <> P.fornavn
group by PERSON.adresse, PERSON.fornavn, PERSON.postnr
order by PERSON.adresse

虽然这样做有效,但首先找到拥有多个人的地址,然后检索这些地址的人员可能会更有效率。

SELECT P.adresse, P.fornavn, P.postnr
  FROM (
       SELECT adresse
         FROM PERSON
     GROUP BY adresse
       HAVING COUNT(*) > 1) G
  JOIN PERSON P ON P.adresse = G.adresse