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

标签 sql mysql mysql-error-1054

这是我的 2 个表:

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 ;

一个文档可以有多个文件。我正在尝试 SELECT files 表中所有带有 JOIN 的文档,但我只想要 1 个文件记录,这是最新的一个。

这是我提出的查询,但不太有效,有人可以建议正确的方法吗?

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`

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

最佳答案

使用:

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”的派生表/内联 View 是对同一个表的连接,它所做的只是将来自 FILES 表的记录调整为每个 file_document_id 的最高...

关于sql - 在 JOIN 中选择最新记录时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3214303/

相关文章:

mysql - 从一个表中选择,从另一个 id 链接的表中计数

MYSQL:在具有到期日期的表中创建行

c# - 根据字符串值搜索 int 列

mysql - Group_Concat 中的元素数

MySQL 连接查询 - 或者被忽略

MySQL COUNT 与 WHERE 和 HAVING 以及 ORDER BY 在同一查询中

mysql - 又一个 "#1054: Unknown column in '字段列表'”之谜

sql - mysql计数问题

mysql - 在动态 View 中使用准备好的语句

mysql - 为什么在 "JOIN (SELECT)"语句中使用别名会导致错误?