2011-11-17 116 views
0

我面临Access数据库中的内部连接问题。我有两张桌子,每张桌子都有两列。两个表中一个是MID,另一个是DOB。第一个表的名字是可维护的,而其他的是第五个。我想检索所有那些在under5表中匹配它的记录,因此我使用Inner join。问题是有一个MID 10106,其在under5表中的频率是2并且在维护中是5,但是在运行查询之后,返回的MID(10106)的数量是10(我猜想预期行为应该是2),这实际上是荒谬的。请帮我解决这个问题。 这是我的查询:MS Access 2007中的内部连接

SELECT maintable.MID, maintable.DOB, Under5.MID, Under5.DOB 
FROM under5 
INNER JOIN maintable ON under5.MID=maintable.MID; 

回答

1

的行为是abosolutely罚款。

主表中的每一行都将与内部表中的每行相匹配。由于有5行主表和在内部表的两行5 * 2 = 10行

Can there be any other way so that i could only retrieve those MID and DOB 
that is present in under5 table after matching it with maintable. 

尝试这种

SELECT distinct Under5.MID, Under5.DOB 
FROM under5, MainTable 
where under5.mid = mainTable.mid 
+0

还能有任何其他方式,这样我可以只检索那些MID和出生日期是与maintable匹配它之后,存在于under5表。 – user510686

+0

有没有其他方法可以让我只能在将它与维护对象匹配后才能检索出现在under5表中的MID和DOB。 – user510686

+0

我尝试了不同的子句,但以相同的问题结束。不知道为什么访问行为是这样的 – user510686

0

您正在描述semijoin例如尝试:

SELECT Under5.MID, Under5.DOB 
    FROM under5 
WHERE EXISTS (
       SELECT * 
       FROM maintable 
       WHERE maintable.MID = under5.MID 
      );