Могу ли я использовать LEFT OUTER JOIN и NULL вместо одной таблицы? - PullRequest
0 голосов
/ 08 марта 2020

Допустим, у меня есть эти таблицы: Tables

И вопрос: Question

Запрос, который я написал

SELECT DISTINCT R.RID, R.Name
  FROM Restaurant R
  LEFT OUTER JOIN VISIT V
    ON V.RID = R.RID
  WHERE V.CID IS NULL

Как вы думаете, это правильный способ подойти к этому запросу? Это может вызвать проблемы?

1 Ответ

2 голосов
/ 08 марта 2020

Существуют различные способы решения этой проблемы, но я предпочитаю использовать левое соединение и поиск нулей. Другие способы включают использование NOT EXISTS с коррелированным подзапросом

SELECT id FROM r WHERE NOT EXISTS(
  SELECT 1 FROM v WHERE v.rid = r.id
)

и использование MINUS для получения всего списка идентификаторов ресторанов за вычетом списка идентификаторов ресторанов, которые есть в таблице посещений

SELECT id FROM r
MINUS
SELECT rid FROM v

В этой форме, конечно, вам нужно будет выполнить объединение, если вы хотите получить больше данных из таблицы ресторанов

Это не исчерпывающий список. Ваш подход к левому соединению хорош и «не вызовет никаких проблем» (как вы думаете, они могут быть?)

Вам не нужно использовать отдельный; по характеру левого объединения строки, которые имеют нулевые посещения с правой стороны, будут все уникальными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...