Oracle старый синтаксис Lelft Join (+) с оператором Like в условии соединения - PullRequest
1 голос
/ 19 июня 2020

Это на Oracle 8i (см. Примечание внизу вопроса).

Я сопоставляю ключевые слова в строках. Строка specifici c приведет к появлению двух или более строк, если она соответствует более чем одному ключевому слову. Но я также хочу захватить строки, которые не совпадают в результатах.

Учтите следующее:

SELECT
    FREE_TEXT.*,
    KEYWORDS.KEYWORD    
FROM
    (
        (SELECT 1 AS ID, 'I like potatoes' AS TXT FROM DUAL) UNION
        (SELECT 2 AS ID, 'I like peppers' AS TXT FROM DUAL) UNION
        (SELECT 3 AS ID, 'I like potatoes, peppers' AS TXT FROM DUAL) UNION
        (SELECT 4 AS ID, 'I like onions' AS TXT FROM DUAL)
    ) FREE_TEXT,    
    (
        (SELECT 1 AS ID, 'potato' AS KEYWORD FROM DUAL) UNION
        (SELECT 2 AS ID, 'pepper' AS KEYWORD FROM DUAL) UNION
        (SELECT 3 AS ID, 'carrot' AS KEYWORD FROM DUAL)
    ) KEYWORDS  
WHERE
    FREE_TEXT.TXT LIKE ('%' || KEYWORDS.KEYWORD || '%') 
ORDER BY
    FREE_TEXT.ID

Этот код дает следующее:

ID  TXT                         KEYWORD
1   I like potatoes             potato
2   I like peppers              pepper
3   I like potatoes, peppers    potato
3   I like potatoes, peppers    pepper

Я хотел бы выполнить левое соединение, чтобы дополнительно получить эту строку:

ID  TXT                         KEYWORD
4   I like onions               NULL

Однако следующий синтаксис с использованием старого Oracle способа выполнения левого соединения с использованием (+), то есть:

WHERE FREE_TEXT.TXT LIKE ('%' || KEYWORDS.KEYWORD || '%') (+)

не работает и выдает ORA-00933: SQL command not properly ended

У меня Oracle 8i, поэтому я не могу выполнить синтаксис соединения ANSI-92 SQL.

ПРИМЕЧАНИЕ : Для ясности, я прекрасно понимаю, что 8i устарела и устарела, но я не могу это контролировать.

1 Ответ

1 голос
/ 19 июня 2020

Оператор внешнего объединения находится не в том месте; попробуйте

WHERE FREE_TEXT.TXT LIKE ('%' || KEYWORDS.KEYWORD (+) || '%') 
...