2014-10-07 3 views
0

У меня есть три MYSQL ТАБЛИЦЫ (InnoDB):Лучший способ получить максимальное значение при соединении MySQL таблицы

NAMES 

id nid version fname lname birth 

RELATIONS 

id rid version idname idperson roleid 

ROLES 

id role 

Я хочу, чтобы выбрать последний вариант каждого ОТНОШЕНИЙ присоединился к последней версии связанных с ними ИМЕНА для конкретного idperson (и имя роли)

конечно, idperson будет иметь 0, 1 или более отношений и будет один или несколько вариантов отношений и ИМЕНА

я написал что-то вроде:

SELECT A.id,A.nid,MAX(A.version),A.idname,A.idperson,A.roleid,B.id,B.role 
FROM RELATIONS A 
INNER JOIN 
ROLES 
ON A.roleid = B.id 
INNER JOIN 
(SELECT id,nid,MAX(version),fname,lname,birth FROM NAMES) C 
ON A.idname = C.id 
WHERE A.idperson = xx 

Это не работает, может быть, потому, что MAX(), кажется, возвращает только одну строку ... Как получить максимальное значение более чем в одной строке в этом контексте присоединения?

PS: Как вы генерируете такой хороший набор данных?

т.е.:

id home datetime  player resource 
---|-----|------------|--------|--------- 
1 | 10 | 04/03/2009 | john | 399 
2 | 11 | 04/03/2009 | juliet | 244 
5 | 12 | 04/03/2009 | borat | 555 
8 | 13 | 01/01/2009 | borat | 700 

ответ

0

Добавление GROUP BY заявление, как в подзапроса у вас есть, а также во внешнем запросе должны позволить функции MAX, чтобы сгенерировать результат, который вы ищете.

Это непроверенный код, но должно дать вам результат, что вы ищете:

SELECT A.id,A.nid,MAX(A.version),A.idname,A.idperson,A.roleid,B.id,B.role 
FROM RELATIONS A 
INNER JOIN 
ROLES 
ON A.roleid = B.id 
INNER JOIN 
(SELECT id,nid,MAX(version),fname,lname,birth FROM NAMES GROUP BY fname,lname) C 
ON A.idname = C.id 
WHERE A.idperson = xx 
GROUP BY fname,lname 

В качестве альтернативы, если он работает лучше для вашей архитектуры базы данных, вы можете использовать любой уникальный идентификатор для сотрудников вы 'd like (возможно, nid?).

Что касается вопроса, который вы поставили в своем PS, я не уверен, что вы просите. Я не вижу home, datetime, player или resource поле в примерах ваших таблиц, которые вы предоставили. Если бы вы могли прояснить ситуацию, я был бы рад попытаться помочь вам в этом.

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