У меня трудности с переносом головы вокруг этого запроса.Найти родителей, где все дети имеют одинаковое значение
Допустим, у нас есть 3 таблицы, которые выглядят следующим образом:
company
id int IDENTITY,
name nvarchar(255)
location
id int IDENTITY,
name nvarchar(255),
company int
address
id int IDENTITY,
name nvarchar(255),
location int
Пожалуйста, игнорирующие ключи и индексы для этого USECASE.
Я хочу вернуть список компаний, в которых все его дочерние местоположения имеют назначенный адрес, и этот адрес одинаковый во всех местах под этой компанией.
Пример работая данные:
select c.name, l.name, a.name
from company as c
join location as l on l.company = c.id
left join address as a on a.location = l.id
company location address
---------- ---------------- -----------------
3-DOM Ankh-Morpork Street 1
Adrenalize Cabot Cove Avenue 2
Adrenalize Mayberry Road 49
InterBlurb Hogsmeade NULL
InterBlurb Kakariko Village Alleyway 13
Octocore Nibelheim Blueberry Creek 2
Octocore Mos Eisley Blueberry Creek 2
Пример результата:
company
----------
3-DOM
Octocore
Как бы идти о достижении этого результата? Я пробовал группировать по l.company
и подбираю count(distinct a.name)
и прочее, но, похоже, я не могу его повесить. Объяснение с вашим запросом было бы весьма полезным, мне нужно это понять.
Мне не ясно, где здесь определяются отношения родитель-ребенок. Почему «Adrenalize» исключается из вашего желаемого набора результатов? –
См. Параграф выше приведенных рабочих данных: «и этот адрес будет одинаковым во всех местах под этой компанией». Места под названием «Адренализировать» имеют разные адреса, поэтому компания должна быть исключена. – krystah