У меня следующая структура таблицы
- table_country ==> country_id (PK) | страна | статус
- table_department ==> отдел_идентификатора (PK) | отдел | country_id (FK)
- table_province ==> Province_id (PK) | провинция | Идентификатор отдела (ФК)
- table_district ==> district_id (PK) | район | провинция_ид (фк)
ПРИМЕЧАНИЕ: все таблицы движка innoDB
В одной стране может быть несколько департаментов, в одном департаменте может быть несколько провинций, а в одной провинции - несколько округов. Теперь мне нужно искать только те страны, в которых есть хотя бы один район
Я написал 2 SQL-запроса ниже, в моем случае оба запроса возвращают одинаковые результаты .... опишите разницу между этими запросами
Использование RIGHT JOIN
:
SELECT c.country_id as id, c.country as name
FROM table_country c
RIGHT JOIN table_department d ON d.country_id=c.country_id
RIGHT JOIN table_province p ON p.department_id=d.department_id
RIGHT JOIN table_district ds ON ds.province_id=p.province_id
WHERE c.status='Active' GROUP BY (c.country_id)
Использование предложений INNER JOIN
и HAVING
:
SELECT COUNT(ds.district), c.country_id as id, c.country as name
FROM table_country c
INNER JOIN table_department d ON d.country_id = c.country_id
INNER JOIN table_province p ON p.department_id = d.department_id
INNER JOIN table_district ds ON ds.province_id = p.province_id
WHERE c.status='Active'
GROUP BY (c.country_id)
HAVING COUNT(ds.district)>0
Скажите, пожалуйста, где оба эти запроса влияют на результаты, и какой мне нужно использовать, или мне нужно использовать другой запрос?
Заранее спасибо