Если я правильно помню, не всегда возможно переписать ANSI-соединение в старом синтаксисе внешнего соединения Oracle, поскольку порядок выполнения может изменить возвращаемые строки.
Что делает "без успеха значит?Вы получили ошибку?Вы ошиблись строками?Вы получили неправильные столбцы?
Левое объединение сохранит все строки в table_1.Основной формой синтаксиса Oracle в старом стиле является декартово произведение с предложением WHERE и токеном «+» на другой таблице.(Это не включает все ваше предложение WHERE. Это преднамеренно.)
SELECT *
FROM table_1 a, table_2 b
WHERE a.id = b.table1_id(+)
См., Например, AskTom .
Для устранения неполадок.,.
Если вы начнете с запроса
SELECT *
FROM table_1 a
LEFT JOIN table_2 b ON (b.table1_id = a.id AND b.other_field = 'value1')
и удалите псевдонимы, у вас будет
SELECT *
FROM table_1
LEFT JOIN table_2 ON (table_2.table1_id = table_1.id AND
table_2.other_field = 'value1')
Есть ли на самом деле столбцы с именами table_2.table1_id
и table_1.id
?Это работает?
Если проблема не в этом, начните проще.Попробуйте это.
SELECT table_1.id, table_2.table1_id
FROM table_1
INNER JOIN table_2 ON (table_2.table1_id = table_1.id);
Это работает?Затем попробуйте это.
SELECT table_1.id, table_2.table1_id
FROM table_1
LEFT JOIN table_2 ON (table_2.table1_id = table_1.id);
Если это работает, попробуйте добавить оставшуюся часть вашего предложения JOIN.