У меня есть 2 таблицы.
1) машина таблица:
2) param таблица:
Мне нужно выбрать дубликаты автомобилей, у которых владелец совпадает с параметрами и НЕ отличаются страховка (это должно быть либо одинаково, либо отсутствует для обоих ).
Я успешно выполняю свой запрос с LEFT JOIN
в синтаксисе ANSI:
SELECT owner.name, owner.value, COALESCE (insur.name, 'insurance'), insur.value, count(*)
FROM car INNER JOIN param owner ON car.id = owner.car_id
LEFT JOIN param insur ON car.id = insur.car_id AND insur.name = 'insur'
WHERE owner.name = 'owner'
GROUP BY owner.name, owner.value, insur.name, insur.value
HAVING count(*) > 1
SQL Fiddle с правильно работающим ANSI-синтаксисом
Но когда я переписал этот запрос со знаком (+)
из синтаксиса Oracle вместо LEFT JOIN
У меня другой результат:
SELECT owner.name, owner.value, COALESCE (insur.name, 'insurance'), insur.value, count(*)
FROM car,
param owner,
param insur
WHERE car.id = owner.car_id
AND owner.name = 'owner'
AND car.id (+) = insur.car_id -- key change
AND insur.name = 'insur'
GROUP BY owner.name, owner.value, insur.name, insur.value
HAVING count(*) > 1
SQL Fiddle с неожиданным результатом (+) вместо LEFT JOIN
Результат этого запроса пуст.Я не понимаю, как переписать его в синтаксисе Oracle, чтобы получить тот же результат запросов.