mysql - 合并3张表,限制1张表需要多个字段

标签 mysql

研究这个有一段时间了。希望有人能够提供一些见解。我有 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/

相关文章:

mysql - 当查询在 delphi 中选择 varchar 数据类型的列时打开 MySQL 查询

mysql查询列出所有带有外键的项目以了解库存位置

mysql - SELECT DISTINCT 字段,但避免某些值

mysql - 跟踪 MySQL 架构和过程更改

mysql - SQL查询以计算联系人所属类别的数量

javascript - 从函数node.js/MySQL的内部函数返回值

时间:2019-03-17 标签:c#mysqlconnection

php - 如何用join来统计mysql?

mysql - 如何使用链接的 MySql 服务器更新 SQL 服务器中的行

mysql - 如何在具有别名的字段上进行 ORDER BY