2016-05-13 6 views
0

mysql SELECT запрос с левым соединением не приводит к ожидаемому результату. Я надеюсь, что кто-то может показать мне или указать мне в правильном направлении,Mysql query LEFT JOIN неожиданный результат

Я пытаюсь построить запрос, где я получаю все пользователи имя из таблицы «пользователей» и выборки сумма все время они провели за конкретную дату из главной таблицы. Я использовал левое соединение, но я не получаю результат, как ожидалось.

SUM(m.time_spent) as sum_total_time 
FROM master as m 
    LEFT OUTER JOIN users as u ON u.user_id = m.user_id 
    WHERE m.date_created >= '2016-05-09' 
    AND m.date_created <= '2016-05-13' 
GROUP BY name 
ORDER BY name 

главной таблица

master_id  user_id   time_spent    date_created 
1      1    40     2016-05-01 
2      2    36     2016-05-02 
3      3    56     2016-05-03 
4      2    33     2016-05-03 
5      1    32     2016-05-05 
nth     nth  nth number     nth date 

пользователей таблица

user_id   first_name   last_name 
1      James     Green 
2      Robert     Cox 
3     Andy     Roger 
etc     etc     etc 

Я хочу, чтобы результат вывода должен выглядеть следующим образом:

user_id  Name    sum_total_time 

1    James Green   62 
2    Robert Cox   69 
3    Andy Roger   56 
4    Brian Harper   0 
5    Angel Lee   0 
6    Andrew Martin  55 
..... 
..... 
Nth Name        Nth value 
+0

You используйте 'WHERE m.date_created> = '2016-05-09'' И ваш date_created меньше этой даты. И что такое AND m.date_created ??? Где условие? –

+0

3 вещи: 1) Таблица на левой стороне должна быть пользователем (или просто переключать ее на правое соединение), а 2) сумма должна «coalesce (m.time_spent, 0)» 3) переместить детали предложения where в соединение, поскольку они должны применяться до объединения данных. – xQbert

+0

какой результат вы получаете вместо этого? – Ishamael

ответ

0

Вы должны выбрать данные непосредственно из мастер-таблица, группа по использованию r и вычислить сумму. Затем вы можете присоединиться к этому результату с помощью таблицы пользователя, чтобы получить всю информацию о пользователе.

+0

Как написать запрос для этого? – Brume007

0

Может быть дата выпуска conversione ..

SUM(m.time_spent) as sum_total_time 
FROM master as m 
    LEFT OUTER JOIN users as u ON u.user_id = m.user_id 
    WHERE m.date_created >=STR_TO_DATE('2016-05-09', '%Y-%m-%d) 

и/или у вас есть также неполные SQL

SUM(m.time_spent) as sum_total_time 
FROM master as m 
    LEFT OUTER JOIN users as u ON u.user_id = m.user_id 
    WHERE m.date_created >= '2016-05-09' 
    AND m.date_created // this condition don't match with nothing.. 
         // could be you forgot a part 

Update 1
Если вы хотите пользователя Тотале то

select u.id, u.name, SUM(m.time_spent) as sum_total_time 
    FROM master as m 
    Inner JOIN users as u ON u.user_id = m.user_id 
    WHERE m.date_created >=STR_TO_DATE('2016-05-09', '%Y-%m-%d) 
    AND m.date_created <= =STR_TO_DATE('2016-05-13'', '%Y-%m-%d) 
    Group by u.id 
+0

Это только дает мне соответствующие строки. Где, как я хочу, получить всех пользователей из таблицы пользователей, которые имеют значения в мастерах (sum_total_time) и у кого нет значений (NULL). – Brume007

+0

Я обновил ответ – scaisEdge

+1

Я решил проблему, добавив условие «LEFT OUTER JOIN ON», а не используя предложение WHERE. Спасибо, в любом случае. – Brume007