MySQL ПОЛНОЕ СОЕДИНЕНИЕ с одной таблицей и ЛЕВОЕ СОЕДИНЕНИЕ с другой в том же запросе?

у меня есть три таблицы, которые я хотел бы связать в одном запросе.

Сценарий представляет собой регистр посещаемости, поэтому он записывает отметку о посещаемости для каждого собрания для каждого пользователя.

Использованы три таблицы:

«команда»:

id | fullname | position         | class | hidden
1  | Team     | --               | black | 1
2  | Dan S    | Team Manager     | green | 0
3  | Harry P  | Graphic Engineer | blue  | 0

«регистр»:

id | mid | uid | mark
1  | 1   | 2   | /
2  | 1   | 3   | I
3  | 2   | 1   | /
4  | 2   | 3   | /

«встречи»:

id | maintask            | starttime  | endtime
1  | Organise Year Ahead | 1330007400 | 1330012800
2  | Gather Ideas        | 1330612200 | 1330617600
3  | TODO                | 1331217000 | 1331222400

Это образец данных.Я хочу сделать следующее:

Выбрать все результаты из реестра, сгруппировать их по пользователю и отсортировать по времени начала встречи. Но, если в таблице регистров нет отметки, я хочу, чтобы она отображала «-» (можно сделать через php, если необходимо). Итак, ожидаемый результат такой:

fullname | mark | mid
Dan S    | /    | 1
Dan S    | /    | 2
Dan S    | -    | 3
Harry P  | I    | 1
Harry P  | /    | 2
Harry P  | -    | 3

Мой SQL-запрос на данный момент таков:

ВЫБРАТЬ u. полное имя , u. id , r. марка , р. середина ОТ команда u ПОЛНОЕ СОЕДИНЕНИЕ регистр r ВКЛ. uid = u. id LEFT JOIN meeting m ON р. середина = м. id ГРУППА ПО u. id ЗАКАЗАТЬ м. starttime ASC

И я получаю сообщение об ошибке от MySQL:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует версии вашего сервера MySQL для правильного использования синтаксиса рядом с регистром FULL JOIN r ON r. uid = u. id LEFT JOIN meeting m НА р. mid = m.`id 'в строке 1

Но я не вижу в этом проблемы: S

Пожалуйста, не могли бы кто-нибудь помочь, указать мне правильное направление или дать мне возможное решение этого. Высоко оценен

Дан

Ответ: Сработавший запрос:

   SELECT     
       u.fullname,    u.id as uid,    
       if(r.uid = u.id, r.mark, '-') as mark,    
       if(r.uid = u.id, r.mid, '-') as mid,    
       r.mid,    m.starttime 
   FROM     
       team u 
         CROSS JOIN     
       register r ON u.id = r.uid
         LEFT OUTER JOIN     
       meetings m ON r.mid = m.id  
   WHERE    
       u.hidden = 0 
   GROUP BY     
       u.id, r.mid 
   ORDER BY     
       m.starttime, u.id ASC
5
задан dani herrera 25 February 2012 в 14:07
поделиться