2017-06-14 58 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'。 –