Oracle旧Lelft联接语法(+;)在联接条件中使用Like运算符
这在Oracle 8i上(请参见问题底部的注释) 我正在字符串上匹配关键字。如果一个特定字符串与多个关键字匹配,它将产生两行或多行。但我还想捕获结果中不匹配的字符串 考虑以下几点:Oracle旧Lelft联接语法(+;)在联接条件中使用Like运算符,oracle,left-join,sql-like,oracle8i,Oracle,Left Join,Sql Like,Oracle8i,这在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
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
此代码产生以下结果:
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方法,即使用(+)进行左连接:
不工作并抛出ORA-00933:SQL命令未正确结束
我使用的是Oracle8i,因此无法使用ANSI-92SQL连接语法
注意:我清楚地知道8i已经过时了,但我无法控制它。外部联接运算符位于错误的位置;试一试
WHERE FREE_TEXT.TXT LIKE ('%' || KEYWORDS.KEYWORD (+) || '%')
这管用!这种语法非常有意义,尽管起初出于某种原因我觉得它很奇怪。