主题:Left outer join出现的错误
由于在打印report的时候出现了连续两条重复数据被打印出来的情况, 所以我就检查了下foxpro里提取数据的code. 现在发现一个很奇怪的现象. 下面用到了LEFT OUTER JOIN的SQL command, 当在fdcif中可以找到和tmpmat中有相同的acno的数据时(tmpmat.acno=fdcif.acno成立). 打印report的情况就很正常. 但是当在fdcif找不到和tmpmat相同的acno数据时, 就会出现重复打印两次的结果.
举例: tmpmat cursor: acno depno prinamt
1 25 123
2 19 2139
fdcif: acno depno customNum
1 25 s111
3 20 s234
当acno=1时, 由于在fdcif中可以找到匹配的acno, 所以一切正常, 只打印一次
1 25 123 s111
当acno =2 时, 由于在fdcif中找不到匹配的acno, 就会连续打印出同样的两条数据
2 19 2139 Null
2 19 2139 Null
请教大家原因, 按照我的理解, outer join不应该出现这样的情况啊,谢谢
SELECT acno, depno, prinamt, matdate, ccycde, autorenew, pledged, prodtyp ;
FROM fddata ;
WHERE &mcond ;
INTO CURSOR tmpmat
IF _TALLY > 0 THEN
SELECT tmpmat.*, cusfnm1, cusfnm2, cusfnm3, phoneno, extpage, faxno ;
FROM tmpmat LEFT OUTER JOIN FDCIF ;
ON tmpmat.acno = fdcif.acno ;
ORDER BY matdate, tmpmat.acno;
INTO CURSOR repcsr
REPORT form repmat noconsole TO PRINTER PROMPT preview in screen
ELSE
=messagebox("No Record Found!")
ENDIF
举例: tmpmat cursor: acno depno prinamt
1 25 123
2 19 2139
fdcif: acno depno customNum
1 25 s111
3 20 s234
当acno=1时, 由于在fdcif中可以找到匹配的acno, 所以一切正常, 只打印一次
1 25 123 s111
当acno =2 时, 由于在fdcif中找不到匹配的acno, 就会连续打印出同样的两条数据
2 19 2139 Null
2 19 2139 Null
请教大家原因, 按照我的理解, outer join不应该出现这样的情况啊,谢谢
SELECT acno, depno, prinamt, matdate, ccycde, autorenew, pledged, prodtyp ;
FROM fddata ;
WHERE &mcond ;
INTO CURSOR tmpmat
IF _TALLY > 0 THEN
SELECT tmpmat.*, cusfnm1, cusfnm2, cusfnm3, phoneno, extpage, faxno ;
FROM tmpmat LEFT OUTER JOIN FDCIF ;
ON tmpmat.acno = fdcif.acno ;
ORDER BY matdate, tmpmat.acno;
INTO CURSOR repcsr
REPORT form repmat noconsole TO PRINTER PROMPT preview in screen
ELSE
=messagebox("No Record Found!")
ENDIF