Oracle 旧的 Lelft Join 语法 (+) 在连接条件中使用 Like 运算符

Oracle old Lelft Join syntax (+) usage with the Like operator in the join condition

这是在 Oracle 8i 上(见问题底部的注释)。

我正在匹配字符串上的关键字。如果特定字符串与多个关键字匹配,则它会产生两行或更多行。但是我也想捕获结果中没有匹配的字符串。

考虑以下几点:

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

我想进行 Left Join 以额外获得这一行:

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 已经过时且已弃用,但我无法控制它。

外连接运算符在错误的地方;尝试

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