0
首先查询比预期的查询:JOIN与WHERE子句返回较少的结果在MS Access
SELECT
TAB1.[CDNO], TAB1.[IDTNO],
IIF(ISNULL([TAB1.ECONIV3]), [TAB1.ECONIV2], 'none') AS [CONTRIB]
FROM
TAB1
WHERE
(TAB1.[UNNN] <> "WATER" AND TAB1.[CCCCPP] <> "SALT")
;
第二个查询:
SELECT
TAB1.[CDNO], TAB1.[IDTNO], IIF(ISNULL([TAB1.ECONIV3]), [TAB1.ECONIV2], 'none') AS [CONTRIB]
, IIF(ISNULL([TAB2.ENTCOM3]), [TAB1.ENTCOM2],'none') AS [CONCOM] , IIF(ISNULL([TAB2.ENTSTI3]), [TAB1.ENTSTI2],'none') AS [CONSTI]
FROM
TAB1
LEFT OUTER JOIN TAB2
ON (TAB1.[IDTNO] = TAB2.[PTDINO] AND (IIF(ISNULL([TAB1.ECONIV3]), [TAB1.ECONIV2], 'none') = IIF(ISNULL([TAB2.ENTSTI3]), [TAB1.ENTSTI2],'none'))
WHERE (TAB1.[UNNN] <> "WATER" AND TAB1.[CCCCPP] <> "SALT")
;
TAB1是具有TAB2行的8倍。 第二个查询出现错误,它返回的行少于第一个查询。 所以我的问题是在第二个查询中,我试图使TAB1的选定列的所有行与 TAB2的两列与2 OUTER JOIN条件匹配。
偶数的括号在第二个查询中打开和关闭,所以可能还有别的东西? – Zachs
是的,必须是别的东西,但该查询中没有任何东西可能会导致从右表中排除,无论如何还有第一个查询的额外排除,因为where子句引用右表的查询是相同的。 – Randall