【问题标题】:Get Value from INNER JOIN 3 table with LASTEST RECORD from each table使用每个表的 LATEST RECORD 从 INNER JOIN 3 表中获取值
【发布时间】:2017-07-25 03:16:12
【问题描述】:

我在从某些表格中获取价值时遇到问题。你可以看到下面的图片,我想得到我用红色阻挡的行。

我试试下面的代码

SELECT p.id, 
       p.email, 
       p.name, 
       p.lastname, 
       p.gender, 
       ex.startwork, 
       ex.endwork, 
       e.degree, 
       e.majority, 
       j.division 
FROM   job_jobseeker AS p 
       INNER JOIN job_experience AS ex 
               ON p.email = (SELECT ex.email 
                             FROM   job_experience 
                             ORDER  BY ex.id DESC 
                             LIMIT  1) 
       INNER JOIN job_education AS e 
               ON p.email = (SELECT e.email 
                             FROM   job_education 
                             ORDER  BY ex.id DESC 
                             LIMIT  1) 
       INNER JOIN job_applying AS j 
               ON p.email = (SELECT j.email 
                             FROM   job_applying 
                             ORDER  BY ex.id DESC 
                             LIMIT  1) 

【问题讨论】:

    标签: mysql sql sql-order-by inner-join


    【解决方案1】:

    你需要correlated sub-queries

    为所有三个表中的每个email 查找最新的id

    SELECT startwork, 
           endwork, 
           email 
    FROM   job_experience a 
    WHERE  a.id = (SELECT Max(b.id) 
                   FROM   job_experience b 
                   WHERE  a.email = b.email) 
    

    上述查询将在job_experience 表中找到每封电子邮件的最新ID。对其他两个表也这样做,然后将结果与job_jobseeker 表连接以获得结果。

    SELECT p.id, 
           p.email, 
           p.name, 
           p.lastname, 
           p.gender, 
           ex.startwork, 
           ex.endwork, 
           e.degree, 
           e.majority, 
           j.division 
    FROM   job_jobseeker AS p 
           INNER JOIN (SELECT startwork, 
                              endwork, 
                              email 
                       FROM   job_experience a 
                       WHERE  a.id = (SELECT Max(b.id) FROM job_experience b 
                                      WHERE  a.email = b.email)) AS ex 
                   ON p.email = ex.email 
           INNER JOIN (SELECT email,  //Just called column without initialize
                              degree, 
                              majority 
                       FROM   job_education a 
                       WHERE  a.id = (SELECT Max(b.id) FROM job_education b 
                                      WHERE  a.email = b.email)) AS e 
                   ON p.email = e.email 
           INNER JOIN (SELECT email, //Just called column without initialize
                              division 
                       FROM   job_applying a 
                       WHERE  a.id = (SELECT Max(b.id) FROM job_applying b 
                                      WHERE  a.email = b.email)) AS j 
                   ON p.email = j.email 
    

    【讨论】:

    • 我编辑了你的一些代码,但它可以工作......感谢您的先进
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2011-04-20
    • 2018-10-29
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多