Access中选择查询的问题

时间:2014-11-16 07:25:24

标签: sql ms-access select

我在选择查询时遇到了一个相当奇怪的问题。首先让我解释一下我的设置。我有5个表:用户名表,电话表,日期表,链接表和数据表。

我的链接表存储用户名表和数字表中的所有ID,以及与数据表中的数据对应的日期。以下是每个表的示例:

---UserName---ID---    ---Phone-----ID----     ---Date---     ---rate---charges---Phone-----Date---
|  Bill Jones   1 |    |    123-4567  1  |     |    1/1  |    |  1.24     10      123-4567   1/1
| Mike Jones    2 |    |    456-7895  2  |     |    1/2  |    |  1.00     5       456-7895   1/1
                                                              |  4.56     20      123-4567   1/1
                                                              |  5.34     4       123-4567   1/1

链接表如下所示:

      ---User ID---Phone ID---Date----
          1          1         1/1
          2          2         1/1 
          1          1         1/1 
          1          1         1/1 

现在在Access中,当我对用户名,电话号码,日期和数据运行选择查询时,我得到一个设置,其中用户,电话和日期表与链接表,电话表和日期表也与数据表连接。它相应地加入了东西,并且几乎完美无缺,除了我注意到并非所有数据都被选中。在真实表格中,我有495条记录,但是当我运行select查询时,只有417条记录被拉过来。我需要更改Access中的设置或内容吗?为什么只会选择一些记录?这可能是编码其他地方的错误吗?我注意到如果我只是做了一个select all的数据表,它会超过495条记录,但是一旦我开始加入其他表格,它就会混乱。

这是select语句:

SELECT DATA.[Charges], DATA.[Rate], Date.[ Date], Phone_Master.[ Phone], User_Master.[User Name]
FROM User_Master 
  INNER JOIN ((Phone_Master 
  INNER JOIN DATA 
     ON Phone_Master.[Phone] = Data.[Phone]) 
  INNER JOIN (Date
  INNER JOIN Link_table
     ON Date.[date] = Link.[date])
     ON (Date.[date] = DATA.[date]) AND (Phone_Master.ID = Link.[Phone ID])) 
     ON User_Master.ID = Link.[Username ID];

这是我在设计视图中加入完成后MS-Access为我创建的确切设置。我只是简单地改变了一些名称以适应我之前的例子。

1 个答案:

答案 0 :(得分:0)

您没有有效的数据模型。您的数据表应与包含ID的其他表链接,而不是与您的手机相关联。我想因为你的查询是如此奇怪地生成(连接中的连接)。

为什么链接表中有重复项?
使用空格命名表是一种不好的做法。

这是您编辑的SQL查询:

SELECT DATA.[Charges], DATA.[Rate], Date.[ Date], Phone_Master.[ Phone], User_Master.[User Name]
   FROM User_Master 
     INNER JOIN ((Phone_Master INNER JOIN DATA ON Phone_Master.[Phone] = Data.[Phone]) 
            INNER JOIN (Date INNER JOIN Link_table ON Date.[date] = Link.[date]) 
                ON (Date.[date] = DATA.[date]) AND (Phone_Master.ID = Link.[Phone ID])) 
     ON User_Master.ID = Link.[Username ID];

我希望你在这里看到一大堆。