Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle旧Lelft联接语法(+;)在联接条件中使用Like运算符_Oracle_Left Join_Sql Like_Oracle8i - Fatal编程技术网

Oracle旧Lelft联接语法(+;)在联接条件中使用Like运算符

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

这在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
此代码产生以下结果:

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

这管用!这种语法非常有意义,尽管起初出于某种原因我觉得它很奇怪。