2013-04-01 2 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' 

Ive также пытались макс:

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' 

Но к югу запрос возвращает нулевые значения из таблицы пользователей. Тем не менее, когда я удаляю limit и max, я получаю значения таблиц пользователей, но я получаю несколько строк за командный код. Есть идеи?

+0

Я предполагаю, что это не закрытие '? –

+0

Почему JOIN на таблице tmp? Почему не фактическое СОЕДИНЕНИЕ и ГРУППА? '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. Теперь мне просто нужно изменить, чтобы включить fullname. Оцените отзывы. – paxx

+0

@ Аарон - нп, рад, что я мог бы помочь! Извините, что не видел CONCAT, чтобы получить полное имя, но, как вы сказали, достаточно просто. – sgeddes

Смежные вопросы