简化了我正在解决的问题,但我认为以下是其要点:
我有两个表(TableA 和 TableB),通过 LEFT JOIN 连接。
我需要从TableA中按时间倒序获取10条记录;但这十个结果中的每一个在 TableB.foo 中都有唯一的值。
即
A.id 为 1,A.date 为两天前,B.foo 为“cat”。
A.id 是 2,A.date 是昨天,B.foo 是“cat”。
A.id 是 3,A.date 是今天,B.foo 是“狗”。
A.id 是 4,A.date 是三天前,B.foo 是“pig”。
A.id 是 5,A.date 是四天前,B.foo 是“dog”。
我希望查询的前 3 个结果是 3,2,4(并且根本不返回 1 和 5)。
这可以通过单个 MySQL 查询来实现吗?
如果做不到这一点,通过多个步骤获得所需结果集的最有效策略是什么?
最佳答案
SELECT T1.id, T1.date
FROM (SELECT A.id id, B.foo foo, A.date date
FROM A JOIN B
ON A.b_id = B.id) T1
JOIN (
SELECT B.foo foo, MAX(A.date) maxdate
FROM A JOIN B
ON A.b_id = B.id
GROUP BY B.foo) T2
ON T1.foo = T2.foo and T1.date = T2.maxdate
ORDER BY T1.date DESC
LIMIT 10
关于mysql - 在连接表中选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12846995/