【问题标题】:how to use distinct in ms access如何在 ms 访问中使用 distinct
【发布时间】:2011-08-12 21:56:36
【问题描述】:

我有两张桌子。任务和类别。

TaskID 不是主键,因为有重复的值。当为特定任务选择多个联系人时,taskid 和其他详细信息将重复。我编写了查询:

SELECT Priority, Subject, Status, DueDate, Completed, Category
FROM Task, Categories
WHERE Categories.CategoryID=Task.CategoryID;

现在为该任务选择了多个联系人,对于 taskid=T4,有两条记录(以灰色突出显示)。我曾尝试在 ms access 2003 中使用 distinct,但它不起作用。我想显示不同的记录。 (这里不需要显示taskid)如果我写:

select priority, distinct(subject), .......

并保持与上述查询中提到的相同,然后它给我一个错误。我也尝试过 distinctrow。但没有成功。如何在 ms 访问中获取不同的值?

【问题讨论】:

  • 你的Task表的PK是多少?

标签: sql ms-access distinct ms-access-2003


【解决方案1】:

好的。它的工作方式是这样的。

SELECT DISTINCT Task.Priority, Task.Subject, Task.Status, Task.DueDate, 
Task.Completed, Categories.Category
FROM Task, Categories
WHERE (((Categories.CategoryID)=[Task].[CategoryID]));

【讨论】:

    【解决方案2】:

    我不喜欢使用 SELECT DISTINCT,我发现它使我的代码需要更长的时间来编译。我这样做的另一种方法是使用 GROUP BY。

        SELECT Priority, Subject, Status, DueDate, Completed, Category
        FROM Task, Categories
        WHERE Categories.CategoryID=Task.CategoryID
        GROUP BY Subject;
    

    我目前没有启动 VBA,但这应该也可以。

    【讨论】:

    • 如果你想用 GROUP BY 替换 DISTINCT,你需要将所有你的输出字段添加到 GROUP BY 子句中
    【解决方案3】:

    使用 SELECT DISTINCT 会为您工作,但这里更好的解决方案是更改您的数据库设计。

    重复记录可能会导致数据不一致。例如,假设在具有相同 TaskID 的不同记录中有两种不同的状态。哪一个是对的?

    一个更好的设计应该包括一个Task表、一个Contact表和一个Assignment表,如下(括号中的字段是PK):

    任务:[TaskID]、TaskPriority、Subject、Status、DueDate、Completed、StartDate、Owner、CategoryID、ContactID、...

    联系人:[ID]、姓名、姓氏、地址、电话号码……

    分配:[TaskID, ContactID]

    然后,您可以使用简单的 SELECT 从任务表中检索任务。 并且每当您需要知道分配给 Tasks 的联系人时,您都可以使用 JOIN 子句,就像这样

    SELECT T.*, C.*
    FROM TaskID as T 
      INNER JOIN Assignment as A
        ON T.TaskID = A.TaskID
      INNER JOIN Contac as C
        ON A.ContactID = C.ID
    

    或类似的。您可以使用 SQL 的所有查询功能对结果进行过滤、排序或分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      • 1970-01-01
      相关资源
      最近更新 更多