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 (+) || '%')
这是在 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 (+) || '%')