前面说了找出两张表中匹配的记录,这里接着讲找出两张表中不匹配的记录。还是以前面的A表B表为例。从A表中找出B表没有的记录,与从B表中找出A表没有的记录,结果是不一样。 我下面的记载,是使用SQL时不同的尝试,有些得出正确答案,有些没有,但可以分析一下为什么是这样一个答案。以找出"A表中B没有匹配项的记录"为例: 1、是Access的"Find Unmatched Query Wizard"生成的。 注意在Access中,返回的查询下部有新增记录空白行。 2、SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID WHERE (A.ID Not In (B.ID)); 这样写跟上面是一个意思,LEFT JOIN后,B.ID一部分是Null,一部分跟A.ID一样。A.ID Not In (B.ID)排除了跟B一样的ID,就是B.ID为Null的部分。注意在Access中,返回的查询下部有新增记录空白行。 3、SELECT A.* FROM A WHERE ((A.ID) Not In (select B.ID from B)); 这里用到了子查询,表达很简洁。注意在Access中,返回的查询下部有新增记录空白行。 注意在Access中,返回的查询下部没有新增记录空白行。 5、SELECT A.* FROM A,B WHERE ((A.ID) Not In (select B.ID from B)); 4和5不同在哪里呢,B.ID是一个数,(select B.ID from B)是一组数。在4中,A表记录跟一个数逐一比较后出结果,在5中,跟一组数比较后出结果,返回的不同值当然是不一样的。 |
|