【问题标题】:Bringing back only one row in a joined table using MS Access使用 MS Access 仅恢复连接表中的一行
【发布时间】:2009-07-21 14:36:38
【问题描述】:

我知道那里有类似的帖子,但是当我尝试在自己的查询中使用它们中的任何一个时,我都无法正常工作。

基本上,我想使用 SQL 视图在 ACCESS 中查询 3 个表。

虽然最初,对于这个例子,我试图只用 2 来做到这一点。

tb1 名称: 任务

tb1 需要的字段: 任务编号 任务标题 项目ID(这个是用来抓最后的项目名称,也就是上面提到的第3张表)

tb2 名称: 任务笔记

需要 tb2 字段: 任务备注 ID 任务注释日期 任务说明

使用设计视图发生的情况是,如果有 3 个注释,例如与任务表中的一项任务相关,它会列出所有 3 个任务注释。

我想要做的是只显示最后输入的任务笔记,无论是[任务笔记ID]还是[任务笔记日期]。

我现在剩下的,从这里的帮助构建的是以下 SQL 语句:

SELECT 

t.[Task ID], 
t.[Task Title], 
t.[Project ID],
tn.*

FROM
Tasks t

INNER JOIN [Task Notes] tn ON t.[Task ID] = tn.[Task ID]

WHERE tn.[Task ID] = 
  (SELECT max(tn.[Task Note Date]) FROM tn where tn[Task ID] = t.[Task ID])
;

我遇到了一个语法错误,但以前的版本也让我卡住了。

我通常在 ACCESS 之外开发,在 php/asp 中很好,但是在 ACCESS 我是新手。

任何帮助将不胜感激

干杯

马修

【问题讨论】:

    标签: sql ms-access join max


    【解决方案1】:

    试试这样的

    SELECT t.[Task ID], 
           t.[Task Title], 
           t.[Project ID],
           tn.*    
      FROM Tasks t 
           INNER JOIN
           (
              SELECT [Task ID], 
                     MAX([Task Note Date]) MaxDate
                FROM [Task Notes] 
               GROUP 
                  BY [Task ID]
           ) TaskNoteIDS 
              ON t.[Task ID] = TaskNoteIDS.[Task ID] 
           INNER JOIN [Task Notes] tn 
              ON TaskNoteIDS.[Task ID] = tn.[Task ID]
                 AND TaskNoteIDS.MaxDate = [Task Notes].[Task Note Date];
    

    【讨论】:

    • 嗨 上面例子中的TaskNoteIDS是什么?它是一个错字,还是一个临时表。我遇到了语法错误,然后当我尝试使用 [Task Notes] 时,它仍然给我语法错误(这对 MS 真的没有帮助)Cheers Matthew
    • TaskNoteIDS 是一个子选择。试试这个 SELECT * FROM ( Tasks AS t INNER JOIN ( SELECT [Task Notes].[Task ID], Max([Task Notes].[Task Note Date]) AS [MaxDate] FROM [Task Notes] GROUP BY [Task Notes ].[Task ID] ) AS TaskNoteIDS ON t.[Task ID] = TaskNoteIDS.[Task ID] ) INNER JOIN [Task Notes] ON (TaskNoteIDS.MaxDate = [Task Notes].[Task Note Date]) AND ([任务注释].[任务 ID] = TaskNoteIDS.[任务 ID]);
    【解决方案2】:

    试试:

    FROM tasks AS t
    FROM [other table] AS tn
    

    这是在 MS Access 中发现的“SQL 风格变体”...

    【讨论】:

    • 不会像发布的那样工作 - 您需要在右方括号之后的尾随句点。如果您有需要括号的名称错误的字段/表,则无法在派生表中引用它们。此外,如果您处于 SQL 92 模式,则可以使用标准 ()。
    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多