Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Выборка данных из двух таблиц Join

#sql #sql_server


Есть таблицы dbo.application, dbo.action,  dbo.ogpo_dept, dbo.employees 

| ID | ins_name | action |     | ID | Name   |    
--------------------------     -------------      
| 1  | Аскар    | 21   |       | 21 | Стикер |    
| 2  | Шыназ    | 18   |       | 18 | Защита |
| 3  | Берик    | null |
| 4  | Берик    | 18   |

| ID | Name               |    | ID | FullName | dept_id |
---------------------------    ---------------------------
| 5  | Департамент продаж |    | 1  | Mike     | 5       |


Запрос:

select od.name as dept_name, e.Fullname, oac.name, COUNT(oa.id) total
from dbo.ogpo_dept od
inner join dbo.employees e on e.dept_id = od.id
inner join dbo.application oa on oa.dept_id = od.id
inner join dbo.action oac on oac.id = oa.[action]
Group By dept_name, e.Fullname, oac.name, oa.[action]


Запрос выводит список договоров агента только с акциями, а мне нужно чтобы возвращалась
договора и без акции и с акциями. Как добавить без акции т.е с null.  

| 3  | Берик    | null |


Ну в итоге результат должен быть:

| dept_name          | Fullname | name   | total |
--------------------------------------------------
|Департамент продаж  | Аскар    | Стикер | 591   |
|Головной офис       | Берик    | Защита | 54    |
|Головной офис       | Берик    | null   | 5     | 

    


Ответы

Ответ 1



Используй LEFT OUTER JOIN там где нужно выводить NULL select od.name as dept_name, e.Fullname, oac.name, COUNT(oa.id) total from dbo.ogpo_dept od left outer join dbo.employees e on e.dept_id = od.id left outer join dbo.application oa on oa.dept_id = od.id left outer join dbo.action oac on oac.id = oa.[action] Group By dept_name, e.Fullname, oac.name, oa.[action]

Ответ 2



При составлении SQL запросов, получающих данные из нескольких таблиц часто возникает необходимость указать, в каких колонках NULL допустим, а в каких нет. Единственный способ решения проблемы - использование одной из разновидностей JOIN. Бывают LEFT JOIN, RIGHT JOIN, INNER JOIN и OUTER JOIN (левый, правый, внутренний и наружный). Разницу между ними проще понять визуально.

Комментариев нет:

Отправить комментарий