Комплексное объединение на 2 столах - PullRequest
0 голосов
/ 28 марта 2020

У меня есть таблица соседства ZIP, которая выглядит следующим образом -

ZIP     NEIGHBOR
------- --------
01026   01330   
01026   01331   
01026   01332   
01026   01333  
01026   01026
.............  

В одном и том же ZIP может быть несколько записей - каждая запись с одним соседом. (ZIP является соседом с самим собой)

У меня есть другая таблица, в которой есть информация о том, какие ZIP не имеют какой-либо пекарни в этом районе,

ZIP  
-----
01026  
01330 
01331
01332
01333
.....

Так нам нужно найти почтовые индексы, у которых нет пекарен по соседству.

Как нам это сделать?

В этом случае нам нужен вывод как '01026' - так как он не имеет пекарен сам по себе и своих соседей

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Надеюсь, я правильно понял, вы просто хотите отфильтровать Table2 (только с ZIP) из Table1 и исключить все эти записи? Если в этой таблице все еще отображаются пекарни, вы присоединяетесь к ним и используете условие ГДЕ НЕ.

SELECT * 
FROM bakerytable, ziponlytable
WHERE NOT bakerytable.zip = ziponlytable.zip

Вызывается неявным присоединением. Мне это нравится, потому что я видел это впервые.

Выбирает каждый столбец из обеих таблиц и ищет это условие.

0 голосов
/ 28 марта 2020

Я понимаю, что вы хотите zip s из первой таблицы (скажем, zip_neighborhood), чьи все neighbor s можно найти в другой таблице (скажем, zip_without_bakery).

Если так Вы можете left join вторая таблица, group by zip и использовать having clause, чтобы убедиться, что все соседи были найдены.

select n.zip
from zip_neighborhood n
left join zip_without_bakery b on b.zip = n.neighbor
group by n.zip
having max(b.zip is null) = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...