代码之家  ›  专栏  ›  技术社区  ›  fire

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

  •  1
  • fire  · 技术社区  · 15 年前

    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 所有带有 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`
    

    3 回复  |  直到 15 年前
        1
  •  3
  •   OMG Ponies    15 年前

    用途:

    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 ...

        2
  •  0
  •   onof    15 年前

    不按文件\u id分组,而是按文件\u documentid分组。

        3
  •  0
  •   Amadan    15 年前

    我想我知道怎么了。。。你有 GROUP BY File_ID GROUP BY File_DocumentID 相反。