2015-06-19 3 views
1

Я хочу видеть полное имя гражданинаКак присоединиться к нескольким таблицам в MySQL 2?

где notifyEmployee = '1' в reportBasket, столы reportNoBasket

И reportNoBasket.groupEmail IS NOT NULL

И подсчитывать по электронной почте от reportBasket, citizenEmail reportNOBasket в одном счетчик

Таблицы:

гражданин (электронной почты, Firstname, фамилия)

reportBasket (электронной почты, notifyEmployee)

reportNoBasket (citizenEmail, notifyEmployee, groupEmail)

ДО Я был представлять мой запрос, чтобы показать свою электронную почту таким образом, он работал Хорошо:

SELECT email,count(email) as email_count 
FROM (
    SELECT email 
    FROM reportBasket 
    WHERE notifyEmployee='1' 
    UNION ALL 
    SELECT citizenEmail 
    FROM reportNoBasket 
    WHERE notifyEmployee='1' 
) as T 
GROUP BY email 
ORDER BY email ASC 

НО ТЕПЕРЬ Я хочу показать полное имя гражданина, а не адрес электронной почты, например. concat(citizen.firstname,' ' citizen.lastname)

Как я могу присоединиться к нему?

ответ

1

попробовать что-то вроде этого:

SELECT concat(firstname, ' ', lastname), count(*) as citizen_count 
FROM (
    SELECT c.firstname, c.lastname 
    FROM reportBasket rb 
    JOIN citizen c 
     ON rb.email = c.email 
    WHERE notifyEmployee='1' 
    UNION ALL 
    SELECT c.firstname, c.lastname 
    FROM reportNoBasket rnb 
    JOIN citizen c 
     ON rnb.citizenEmail = c.email 
    WHERE notifyEmployee='1' 
) as T 
GROUP BY firstname, lastname 
ORDER BY firstname, lastname ASC 
+0

спасибо u too much, он работает со мной (Y) –

+0

что делать, если я хочу показать письмо также ?? –

+0

Просто добавьте его во все 3 'SELECT' утверждения и' GROUP BY' – TobyLL

1

Я думаю, что вы хотите группировать статьи еще по письмам (так как они являются уникальными), а затем просто присоединиться к таблице граждан к Вписать имя

SELECT email,count(email) as email_count, concat(citizen.firstname,' ' citizen.lastname) 
FROM (SELECT email 
     FROM reportBasket 
     WHERE notifyEmployee='1' 
     UNION ALL 
     SELECT citizenEmail 
     FROM reportNoBasket 
     WHERE notifyEmployee='1')as T 
LEFT JOIN citizen USING (email) 
GROUP BY email 
ORDER BY email ASC 
1

попробовать это :

SELECT count(email) as email_count, concat(citizen.firstname,' ' citizen.lastname) as name 
FROM (SELECT email 
     FROM reportBasket 
     WHERE notifyEmployee='1' 
     UNION ALL 
     SELECT citizenEmail 
     FROM reportNoBasket 
     WHERE notifyEmployee='1')as T 
LEFT JOIN citizen USING (email) 
GROUP BY name 
ORDER BY name ASC 
Смежные вопросы