如何将表连接到自身并获取最大行然后将另一个表连接到它

时间:2017-06-14 06:15:25

标签: mysql sql

我有一个包含冗余条目的表。我需要的是 获取具有最大id数据的列,然后将表连接到users表并根据最大行user_id获取名称

 SELECT id,labref,user_id FROM tracking_table t WHERE t.id = 
 (SELECT MAX(t2.id) FROM tracking_table t2, user u WHERE t.labref = t2.labref AND u.id = t2.user_id)

SQL查询:

 id | labref | user_id
 --------------------
 2  |   a    |  3
 --------------------
 5  |   b    |  7
 --------------------

结果:

 Users Table

 id  |  name
 -------------
 1  |   ua  
 ------------
 2  |   ub   
 ------------
 3  |   uc  
 ------------
 4  |   ud  
 ------------
 5  |   ue    
 -------------
 7  |   uf   
 -------------

想加入下面的用户表

  id | labref | name
 --------------------
 2  |   a    |  uc
 --------------------
 5  |   b    |  uf
 --------------------

期望的结果应如下:

hane::tuple<typename Types::value_type...> combination; 

关于我现在陷入困境的建议?

3 个答案:

答案 0 :(得分:2)

您可以使用子查询查找每个实验室参考的最大id值。然后,加入此子查询,为您提供所需的有效行。最后,将此连接到用户表以引入用户名。

SELECT
    t1.id,
    t1.labref,
    u.name
FROM tracking_table t1
INNER JOIN
(
    SELECT labref, MAX(id) AS max_id
    FROM tracking_table
    GROUP BY labref
) t2
    ON t1.labref = t2.labref AND
       t1.id     = t2.max_id
INNER JOIN user_table u
    ON t1.user_id = u.id

<强>输出:

enter image description here

在这里演示:

Rextester

答案 1 :(得分:1)

请查看此声明。它符合您的需求吗?

SELECT t.id, t.labref, u.name 
FROM tracking_table t 
INNER JOIN users u 
    on t.user_id = u.id 
WHERE t.id = 
     (SELECT MAX(t2.id) 
      FROM tracking_table t2, user u 
      WHERE t.labref = t2.labref AND u.id = t2.user_id)

答案 2 :(得分:1)

子查询中不需要users表。您在主查询中需要它:

SELECT t.id, t.labref, u.name 
FROM tracking_table t 
JOIN user u ON u.id = t.user_id
WHERE t.id = (SELECT MAX(t2.id) FROM tracking_table t2 WHERE t.labref = t2.labref);

顺便说一下,你不应该使用逗号分隔的连接。它们在1992年变得多余。改为使用显式ANSI连接。