2013-06-08 5 views
2

Здравствуйте, я хочу получить данные из двух таблиц, которые имеют одинаковое имя столбца. Моя структура таблицы являютсяПрисоединиться к тому же имени столбца

Таблица пациентов

--------------------------------------- 
| id | affiliate_id | somecolumn | 
--------------------------------------- 
| 1 | 8   | abc   |   
--------------------------------------- 
| 2 | 8   | abc   |   
--------------------------------------- 
| 3 | 9   | abc   |   
--------------------------------------- 

Таблица Ведет

--------------------------------------- 
| id | affiliate_id | someothern | 
--------------------------------------- 
| 1 | 8   | xyz   |   
--------------------------------------- 
| 2 | 8   | xyz   |   
--------------------------------------- 
| 3 | 3   | xyz   |   
--------------------------------------- 

Теперь мое требование было получить COUNT(ID) из обеих таблиц в одном запросе. Я хочу привести как

---------------------------------------------------- 
| affiliate_id | total_patients | total_leads | 
---------------------------------------------------- 
|  8  |  2   |  2  |   
---------------------------------------------------- 
|  9  |  1   |  0  |   
---------------------------------------------------- 
|  3  |  0   |  1  |   
---------------------------------------------------- 

Я написал следующий запрос

SELECT `p`.`affiliate_id`, COUNT(p.id) AS `total_patients`, 
    COUNT(cpl.id) AS `total_leads` 
FROM `patients` AS `p` 
    INNER JOIN `leads` AS `cpl` ON p.affiliate_id =cpl.affiliate_id 
GROUP BY `p`.`affiliate_id` 

Но я не получаю результат. Этот результат запроса дает только один филиал с таким же числом total_patients и total_leads

+0

Что вы * действительно * хочу это полное внешнее соединение, что MySQL не поддерживает ... – eggyal

ответ

3

Проблема заключается в том, что вам нужно, чтобы получить список отчетливый affiliate_id первым, а затем присоединиться к вашим другим таблицам, чтобы получить результат:

select a.affiliate_id, 
    count(distinct p.id) total_patients, 
    count(distinct l.id) total_leads 
from 
(
    select affiliate_id 
    from patients 
    union 
    select affiliate_id 
    from leads 
) a 
left join patients p 
    on a.affiliate_id = p.affiliate_id 
left join leads l 
    on a.affiliate_id = l.affiliate_id 
group by a.affiliate_id; 

См SQL Fiddle with Demo

0

двумя способами:

Select l.affiliate_id , 
     count(distinct p.id) patientCount, 
     count(distinct l.id) LeadCOunt 
From patients p Join leads l 
    On l.affiliate_id = p.Affiliate_id 
Group By l.affiliate_id 

или (предполагающие филиалы являются в их собственном столе где-то)

Select Affiliate_id, 
    (Select Count(*) From Patients 
    Where Affiliate_id = a.Affiliate_id) patientCount, 
    (Select Count(*) From Leads 
    Where Affiliate_id = a.Affiliate_id) LeadCount 
From affiliates a 
+0

Я не downvoter, но ваш первый запрос является неправильным. –