SQL альтернатива левому соединению

0

У меня есть этот запрос, который выполняет left join по таблицам и возвращает некоторые строки.

Запрос с левым соединением:

Select DISTINCT 
e.id,e.name
from employee e
left join
job j on j.id = e.id
where e.id like 'D%'

Теперь для одного и того же запроса я хотел получить результат без использования left join и я смог создать этот SQL-запрос, который дал мне тот же результат, что и указанный выше запрос.

Запрос без левого соединения:

Select DISTINCT 
e.id,e.name
from employee e, job j
where e.id like 'D%' AND (e.id=j.id  OR  e.id <> j.id)

Хотя запрос возвращает тот же результат, что и выше, мой вопрос заключается в следующем: имеет ли смысл второй запрос и является ли он эквивалентным левому соединению?

  • 2
    Почему бы вам не использовать LEFT JOIN ? Не используйте второй запрос.
  • 0
    Возможная копия ANSI против не-ANSI синтаксиса SQL JOIN
Показать ещё 9 комментариев
Теги:
join
left-join

1 ответ

1
Лучший ответ

Я думаю, что exists более естественный метод:

Select e.id, e.name
from employee e
where exists (select 1 from job j where j.id = e.id) and
      e.id like 'D%';

Это также должно иметь гораздо лучшую производительность.

РЕДАКТИРОВАТЬ:

Дноет делает действительно хороший момент. Я пропустил "левый" в left join. Самый простой запрос:

Select e.id, e.name
from employee e
where e.id like 'D%';

Я ожидал бы, что id будет уникальным, поэтому select distinct не нужно.

  • 0
    Производительность может быть лучше, но это даст другой результат, то есть внутреннее соединение. Но исходный Select точно такой же, как Select e.id,e.name from employee e where e.id like 'D%' (при условии, что id - это уникальный столбец). Нет доступа к столбцу из внутренней таблицы, поэтому нет необходимости присоединяться вообще. Достойный оптимизатор (конечно, не тот, что в MySQL) сделает это устранение соединений автоматически.
  • 0
    @dnoeth. , , Вы абсолютно правы. Я корректировал ответ, ссылаясь на ваш комментарий.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню