2017-06-14 95 views
0

我有一个包含多余条目的表。我需要的是 获得具有最大ID数据列,那么表连接到用户表,并得到一个基于最大行名称user_id说明如何将表连接到自身并获得最大行然后将另一个表连接到它

tracking table 

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

SQL查询:

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) 

结果:

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 
-------------------- 

建议,以我现在卡在哪里?

+2

我必须编辑问题,因为您的预期输出有错字。在预期的结果集中应该是用户'uc'和'uf'。 –

+0

感谢您的错字更正。 – Alphy

回答

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

请检查此声明。它是否符合您的需求?

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) 
+0

#1052 - 字段列表中的列'id'不明确 – Alphy

+0

请参阅我的更新 –

+0

像魅力一样工作 – Alphy

1

在使用者表是在子查询中不必要的。你需要在主查询:

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连接。

+0

谢谢答案,但mysql返回错误 – Alphy

+0

#1054 - 'on子句'中的未知列't2.user_id' – Alphy

+0

复制并粘贴错误。它当然必须是't.user_id'。 –

相关问题