MS Access 2007 中的 SQL 内部连接

Posted

技术标签:

【中文标题】MS Access 2007 中的 SQL 内部连接【英文标题】:SQL Inner join in MS Access 2007 【发布时间】:2011-11-17 07:01:06 【问题描述】:

我在 Access 数据库中遇到内部联接问题。我有两个表,每个表有两列。两个表中一个是 MID,另一个是 DOB。第一个表名为maintable,其他为under5。我想在将 under5 表与 maintable 匹配后检索所有这些记录,所以我使用了内连接。问题是有一个 MID 10106,其在 under5 表中的频率为 2,在 maintable 中为 5,但运行查询后返回的 MID(10106) 的数量为 10(我猜预期的行为应该是 2),这真的很荒谬.请帮我解决这个问题。 这是我的查询:

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

【问题讨论】:

【参考方案1】:

行为非常好。

主表中的每一行都将与内表中的每一行匹配。因为主表有 5 行,内表有 2 行 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

【讨论】:

能否有其他方法让我只能在与 maintable 匹配后检索 under5 表中存在的那些 MID 和 DOB。 能否有其他方法让我只能在与 maintable 匹配后检索 under5 表中存在的那些 MID 和 DOB。 我尝试了 Distinct 子句,但以同样的问题结束。不知道为什么访问会这样 @user510686 请查看上面的编辑答案,看看它是否有效?【参考方案2】:

您正在描述semijoin,例如试试:

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

【讨论】:

以上是关于MS Access 2007 中的 SQL 内部连接的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server 2008 迁移到 MS access 2007

MS Access 2007 中的 SQL JOIN 问题

连接到 ODBC 时出现 MS Access 错误

按计数排序未正确排序 - SQL (MS Access 2007)

无法使用 MS Access 2007 访问 ODBC DB

如何从 MS access 2007 中的特定表中选择索引