2013-04-01 129 views
2

在我的頭上抨擊我的頭並不確定如何解決。我需要從包含用戶信息的團隊表(不同值)中返回1個每個團隊代碼的行。MySQL LIMIT 1返回空值

表用戶可以有多個基於團隊代碼的值,但我需要它只返回1(任何一個,哪個都沒關係)。我已經試過:

SELECT a.teamcode, a.area, c.uniqid, c.fullname, c.email 
FROM teams a 
LEFT JOIN 
(SELECT uniqid, CONCAT(first_name, ' ', last_name) AS fullname, email, teamcode from users LIMIT 1) c 
on a.teamcode = c.teamcode 
WHERE a.area= 'ZF15' 

香港專業教育學院還試圖最大:

SELECT a.teamcode, a.area, c.uniqid, c.fullname, c.email 
FROM teams a 
LEFT JOIN 
(SELECT max(uniqid) as uniqid, CONCAT(first_name, ' ', last_name) AS fullname, email, teamcode from users) c 
on a.teamcode = c.teamcode 
WHERE a.area= 'ZF15' 

但子查詢從用戶表返回空值。但是,當我刪除限制和最大值,我得到的用戶表值,但我得到多個行每團隊代碼。有任何想法嗎?

+0

我想這不是最後的'? –

+0

爲什麼在tmp表上加入?爲什麼不是實際的JOIN和GROUP BY?子查詢中的「LIMIT 1」通常是不完美查詢的標誌。 – Rudie

+0

謝謝 - 是的,這是複製和粘貼錯誤。尾部'包含在查詢本身中。查詢執行但返回用戶表中的列的空值。 – paxx

回答

2

我認爲這應該工作,每隊最多(uniqid)加入對自身用戶:

SELECT a.teamcode, a.area, 
    c.uniqid, CONCAT(c.first_name, ' ', c.last_name) AS fullname, c.email 
FROM teams a 
    LEFT JOIN (
     SELECT MAX(uniqid) maxuniqid, teamcode 
     FROM users 
     GROUP BY teamcode 
    ) u on a.teamcode = u.teamcode 
    LEFT JOIN users c on c.teamcode = u.teamcode 
     AND c.uniqid = u.maxuniqid 
WHERE a.area= 'ZF15' 

這會從用戶表中的最大(uniqid),由teamcode(1爲每個分組球隊)。然後加入到用戶表中以獲取該用戶的姓名和電子郵件。

+0

'c.fullname'不存在,但其餘聽起來似乎是合理的。你沒有嘗試就做出來了嗎? – Rudie

+0

這很有效,謝謝Sgeddes。現在我只需要編輯以包含全名。欣賞反饋。 – paxx

+0

@Aaron - np,很高興能幫上忙!對不起,沒有看到CONCAT得到全名,但正如你所說,很容易。 – sgeddes