我有一个名为document_versions的表,如下所示:
CREATE TABLE `document_versions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`document_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`document` text,
`created_on` datetime NOT NULL,
`version` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
)
我想在document_id列表中选择除了每个文档的最大(版本)之外的所有文件。我可以获得document_ids列表的所有条目,没有任何问题。问题是当我需要设置“除了最大(版本)之外的所有”的约束。我一直这样做,显然不能正常工作:
SELECT * FROM document_versions WHERE document_id IN (SELECT document_id FROM documents WHERE account_id=?) AND version < (SELECT MAX(version) FROM document_versions)
有没有办法在第二个子选择中应用document_id约束,或者我是以错误的方式接近它?
答案 0 :(得分:1)
您可以使用:
SELECT *
FROM document_versions
WHERE (document_id, id) NOT IN (SELECT document_id, MAX(id)
FROM document_versions
WHERE account_id = ?
GROUP BY document_id)
AND account_id = ?;