研究这个有一段时间了。希望有人能够提供一些见解。我有 3 张 table 。所有这些我都在抓取多列,但第三列我需要将输出限制为最新的时间戳条目,但仍然显示多列。 如果我有以下数据[请参阅 SQL Fiddle]:
http://sqlfiddle.com/#!2/84b91/6
fiddle 是 Table1(users) 中的 (names) 列表,Table2(job) 中的 (job_name,years),然后是 Table3(job_details) 中的 (score, timestamp)。所有这些都通过用户 ID 链接在一起。
我绝对不擅长 MYSQL。我知道我遗漏了一些东西……可能是一系列的 JOIN。通过这样做,我已经能够得到表 1、表 2 和表 3 的一列:
select a.id, a.name, b.job_name, b.years,
(select c.timestamp
from job_details as c
where c.user_id = a.id
order by c.timestamp desc limit 1) score
from users a, job as b where a.id = b.user_id;
此时,我可以在前两列上获取多列数据,将第 3 列限制为一个值,并在最后一个时间戳上对该值进行排序...
我的问题是:如何向极限添加第二列?在 fiddle 的示例中,我想将分数和时间戳添加到输出中。
我希望输出是:
姓名、工作、年份、分数、时间戳。最后两列只是 job_details 中的最后一个条目,按最近的 TIMESTAMP 排序。
如果需要更多信息,请告诉我!感谢您的时间!
最佳答案
试试这个:
select a.id, a.name, b.job_name, b.years, c.timestamp, c.score
from users a
INNER JOIN job as b ON a.id = b.user_id
INNER JOIN (SELECT jd.user_id, jd.timestamp, jd.score
FROM job_details as jd
INNER JOIN (select user_id, MAX(timestamp) as tstamp
from job_details
GROUP BY user_id) as max_ts ON jd.user_id = max_ts.user_id
AND jd.timestamp = max_ts.tstamp
) as c ON a.id = c.user_id
;
关于mysql - 合并3张表,限制1张表需要多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969562/