У меня есть этот запрос, который выполняет 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)
Хотя запрос возвращает тот же результат, что и выше, мой вопрос заключается в следующем: имеет ли смысл второй запрос и является ли он эквивалентным левому соединению?
Я думаю, что 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
не нужно.
Select e.id,e.name from employee e where e.id like 'D%'
(при условии, что id
- это уникальный столбец). Нет доступа к столбцу из внутренней таблицы, поэтому нет необходимости присоединяться вообще. Достойный оптимизатор (конечно, не тот, что в MySQL) сделает это устранение соединений автоматически.
LEFT JOIN
? Не используйте второй запрос.