SQL相同的邮政编码

时间:2012-11-01 12:31:58

标签: sql

select PERSON.fornavn, PERSON.efternavn, PERSON.postnr, POST.distrikt
from PERSON inner join POST on POST.postnr = PERSON.postnr
inner join MEDLEM on PERSON.personnr = MEDLEM.personnr
inner join FORMAND on MEDLEM.personnr = FORMAND.personnr
group by PERSON.fornavn, PERSON.efternavn, PERSON.postnr, POST.distrikt, FORMAND.afdnr
having FORMAND.afdnr = 3
order by PERSON.fornavn

我需要向与第3部门的老板展示相同邮政编码的人员展示,但结果毫无意义。

Fornavn =名字,Formand = boss,Adresse = adress,Afdeling = Department(afdnr = department nr。),Medlem =成员

表格:

PERSON: personnr, fornavn, adresse, postnr
POST: postnr, district
FORMAND: personnr, afdnr
MEDLEM: personnr, afdnr
AFDELING: afdnr, afdname

2 个答案:

答案 0 :(得分:2)

select PERSON.fornavn, PERSON.efternavn, PERSON.postnr, POST.distrikt
from PERSON inner join POST on POST.postnr = PERSON.postnr
inner join MEDLEM on PERSON.personnr = MEDLEM.personnr
inner join FORMAND on MEDLEM.personnr = FORMAND.personnr
where FORMAND.afdnr = 3
group by PERSON.fornavn, PERSON.efternavn, PERSON.postnr, POST.distrikt, FORMAND.afdnr
order by PERSON.fornavn

尝试:

where FORMAND.afdnr = 3 

而不是

having FORMAND.afdnr = 3

答案 1 :(得分:0)

如果我理解你的权利(“与第3部门的老板一样生活在同一邮政编码上的人”,并且假设只有一个老板:

select PERSON.fornavn, PERSON.efternavn, PERSON.postnr, POST.distrikt
from PERSON
inner join POST on POST.postnr = PERSON.postnr
where PERSON.postnr = (SELECT pf.postnr 
                       FROM FORMAND f
                       inner join PERSON pf ON f.personnr = pf.personnr 
                       WHERE f.afdnr = 3)
order by PERSON.fornavn

注意:除非我遗漏了某些内容,否则根据描述您的查询没有意义。您正在personnr通过MEDLEM加入PERSON到FORMAND,这意味着您只能获得老板的记录(PERSON.personnr = FORMAND.personnr)。

注意:如果有多个老板,您可以将=子句中的WHERE更改为IN,以使所有与之相同的邮政编码中的人员老板。


如果我读错了你的意思,你实际上是指“部门3的(与老板的邮政编码相同的人)”,试试:

select p.fornavn, p.efternavn, p.postnr, POST.distrikt
from PERSON p
inner join POST on POST.postnr = p.postnr
inner join MEDLEM on p.personnr = MEDLEM.personnr
inner join FORMAND on MEDLEM.afdnr = FORMAND.afdnr
inner join PERSON pf on FORMAND.personnr = pf.personnr AND pf.postnr = p.postnr
where MEDLEM.afdnr = 3
order by PERSON.fornavn

注意:同样,我相信你加入这个问题很奇怪。见上文。