在JOIN中选择最新记录时出现问题

时间:2010-07-09 15:50:46

标签: sql mysql mysql-error-1054

这是我的两张桌子:

CREATE TABLE `documents` (
  `Document_ID` int(10) NOT NULL auto_increment,
  `Document_FolderID` int(10) NOT NULL,
  `Document_Name` varchar(150) NOT NULL,
  PRIMARY KEY  (`Document_ID`),
  KEY `Document_FolderID` (`Document_FolderID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=331 ;


CREATE TABLE `files` (
  `File_ID` int(10) NOT NULL auto_increment,
  `File_DocumentID` int(10) NOT NULL,
  `File_Name` varchar(255) NOT NULL,
  PRIMARY KEY  (`File_ID`),
  KEY `File_DocumentID` (`File_DocumentID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=333 ;

1个文档可以有多个文件。我正在尝试SELECT JOIN files表上SELECT `documents`.* FROM `documents` INNER JOIN ( SELECT MAX(`File_ID`), * FROM `files` WHERE `File_DocumentID` = `documents`.`Document_ID` GROUP BY `File_ID` ) AS `file1` ON `documents`.`Document_ID` = `file1`.`File_DocumentID` WHERE `documents`.`Document_FolderID` = 94 ORDER BY `documents`.`Document_Name` 的所有文档,但我只想要一个最新的文件记录。

以下是我提出的我的查询不太有效,有人能提出正确的方法吗?

{{1}}

*编辑:错误是'where子句'中的未知列'documents.Document_ID'

3 个答案:

答案 0 :(得分:3)

使用:

SELECT d.*, f.*
  FROM DOCUMENTS d
  JOIN FILES f ON f.file_document_id = d.document_id
  JOIN (SELECT t.file_document_id,
               MAX(t.file_id) AS max_file_id
          FROM FILES t
      GROUP BY t.file_document_id) x ON x.file_document_id = f.file_document_id
                                    AND x.max_file_id = f.file_id

名为“x”的派生表/内联视图是同一个表的连接,它所做的就是调整来自FILES表的记录,使其最高file_document_id ...

答案 1 :(得分:0)

不要按file_id分组,而是按File_documentid分组。

答案 2 :(得分:0)

我想我看到了什么问题......你有GROUP BY File_ID,但我想你真的想要GROUP BY File_DocumentID