要获得最新contract_to
值,您需要一个MAX()
聚合。执行此操作的正确方法是使用子查询连接来仅获取article
和MAX(contract_to)
值,然后将其与行的剩余值连接。最后,整个结构可以靠在articles
桌子上。
SELECT
articles.*,
contracts.*
FROM
articles
/* Join against a subquery which returns only the article and latest contract_to */
LEFT JOIN (
SELECT article, MAX(contract_to) AS contract_to
FROM contracts
GROUP BY article
) maxcontract ON articles.article_id = maxcontract.article
/* and join that against the rest of the contracts table, on those two column values */
JOIN contracts
ON maxcontract.article = contracts.article
AND maxcontract.contract_to = contracts.contract_to
由于 MySQL 对GROUP BY
子句的内容很宽松,这种方法实际上可能不是必需的,单独对contracts
表进行连接,您可能可以单独使用子查询连接来执行此操作,但这在大多数其他 RDBMS 中不起作用,这是真正正确的方法是不依赖 MySQL 的怪异行为。