我需要提取每个省注册学生的统计信息。学生的住所带有邮政编码。邮政编码链接到县辖区;县辖区与一个省相连。使用内部联接建立选择是相当简单的选择。
但是,从学生地址到邮政编码(代码= 1911),我遇到了一个问题,因为该邮政编码有多个记录,且记录的郊区名称不同。请参阅下面的数据摘录。
1911 FLORA GARDENS,Vanderbijlpark 7702 VANDERBIJLPARK
1911 HENBYL 7702 VANDERBIJLPARK
1911 LUMIER 7702 VANDERBIJLPARK
1911 NORTHDENE,Vanderbijlpark 7702 VANDERBIJLPARK
1911 PARK SOUTH 7702 VANDERBIJLPARK
1911 STAAL 7702 VANDERBIJLPARK
1911 VANDERBIJLPARK 7702 VANDERBIJLPARK
1911 ZUURFONTEIN 7702 VANDERBIJLPARK
当我执行“内部联接”选择时,
FROM gen.getadr
INNER JOIN stud.iadbio ON getunum = iadstno
INNER JOIN stud.ibvpos ON getpcode = ibvcode
INNER JOIN stud.ibdmag ON ibvcode = ibdcode
不返回任何行。
当我将其更改为LEFT联接
FROM gen.getadr
INNER JOIN stud.iadbio ON getunum = iadstno
LEFT JOIN stud.ibvpos ON getpcode = ibvcode
LEFT JOIN stud.ibdmag ON ibvcode = ibdcode
我从ibvpos和idbmag获得的行没有。因此,我无法加入省份表来计算每个省份的学生。
有没有一种方法可以表明getadr(学生地址)和ibvpos(邮政编码的定义-多行)之间的联接必须基于getpcode和ibvcode之间的唯一匹配?
完整的select语句如下:
SELECT getunum, getnumtype, getaddrtype, GETCSn, getsdate, getedate, gettac,
getsyscrt
, getadr1, getadr2, getadr3, getadr4, getpcode, ibvtown, ibdname
FROM gen.getadr
INNER JOIN stud.iadbio ON getunum = iadstno
LEFT JOIN stud.ibvpos ON getpcode = ibvcode
LEFT JOIN stud.ibdmag ON ibvcode = ibdcode
where getnumtype = 'I' and getsyscrt = 'S'
AND iadstno = 217244521
AND getaddrtype = 'PA'
AND getedate IS NULL
AND getprimary = 'Y'
ORDER BY getsyscrt, getnumtype, getcsn
任何帮助将不胜感激。
此致
Phlip
答案 0 :(得分:0)
如果没有内部联接结果,则表示getadr表中的数据与其他表中的数据不匹配(如果这些表中没有数据或数据格式不同)。您对此查询有任何结果吗? getpcode是否不为null,并且存在于stud.ibvpos表中?
SELECT getunum, getpcode
FROM gen.getadr
INNER JOIN stud.iadbio ON getunum = iadstno
LEFT JOIN stud.ibvpos ON getpcode = ibvcode
LEFT JOIN stud.ibdmag ON ibvcode = ibdcode
WHERE ibvcode is not null
AND getnumtype = 'I'
AND getsyscrt = 'S'
AND getaddrtype = 'PA'
AND getedate IS NULL
AND getprimary = 'Y'
答案 1 :(得分:0)
我仅创建了一个子选择,可以唯一选择邮政编码和地方行政区,例如:
FROM gen.getadr
INNER JOIN stud.iadbio ON getunum = iadstno
INNER JOIN
(SELECT DISTINCT ibvpcode, ibvcode
FROM stud.ibvpos
) ON getpcode = ibvpcode
INNER JOIN stud.ibdmag ON ibvcode = ibdcode
INNER JOIN stud.innprv ON ibdprovc = innprovc
这给了我预期的结果。
此致
Phlip