SELECT DISTINCT D.HELP_TITLE AS MAIN_HELP_TITLE     
, C.HELP_TITLE AS TOPIC_HELP_TITLE                  
, C.HELP_CYPHER                                     
, C.HELP_VAR                                        
, C.HELP_PCS                                        
, C.CONTEXT                                         
FROM  scmssa.A_PACK_ITEM_02 A                       
, scmssa.A_HELP_KEY_01 B                            
, scmssa.A_HELP_TITLE_01 C                          
, scmssa.A_HELP_TITLE_01 D                          
WHERE A.PACK_CYPHER = 'NE6A'                        
AND A.PACK_VAR = 'AA'                               
AND A.PACK_PCS = '04'                               
AND B.ATOM_LANGUAGE = 'EN'                          
AND B.HELP_CYPHER = A.ITEM_CYPHER                   
AND B.HELP_VAR = A.ITEM_VAR                         
AND B.HELP_PCS = A.ITEM_PCS                         
AND C.ATOM_LANGUAGE = B.ATOM_LANGUAGE               
AND C.HELP_CYPHER = B.HELP_CYPHER                   
AND C.HELP_VAR = B.HELP_VAR                         
AND C.HELP_PCS = B.HELP_PCS                         
AND C.CONTEXT = B.CONTEXT                           
AND D.HELP_CYPHER = A.ITEM_CYPHER                   
AND D.HELP_VAR = A.ITEM_VAR                         
AND D.HELP_PCS = A.ITEM_PCS                         
AND D.ATOM_LANGUAGE = 'EN'                          
AND D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR         
ORDER BY 1,2;                                       这段代码中 C表和D表是同一张表,所以对段命令的select取法有点不太看明白
请大家帮我看看我的理解对不对
是不是
1)A表中取出同时满足
A.PACK_CYPHER = 'NE6A'                        
AND A.PACK_VAR = 'AA'                               
AND A.PACK_PCS = '04' 
条件的record,当作一张临时子表A12)B表中取出同时满足
B.ATOM_LANGUAGE = 'EN'                          
AND B.HELP_CYPHER = A.ITEM_CYPHER                   
AND B.HELP_VAR = A.ITEM_VAR                         
AND B.HELP_PCS = A.ITEM_PCS   
条件的record,其中A.ITEM_CYPHER,A.ITEM_VAR,A.ITEM_PCS都取自子表A1,然后当作临时子表B13)C表中取出同时满足
C.ATOM_LANGUAGE = B.ATOM_LANGUAGE               
AND C.HELP_CYPHER = B.HELP_CYPHER                   
AND C.HELP_VAR = B.HELP_VAR                         
AND C.HELP_PCS = B.HELP_PCS                         
AND C.CONTEXT = B.CONTEXT  
条件的record,其中,B.ATOM_LANGUAGE,B.HELP_CYPHER,B.HELP_VAR,B.HELP_PCS,B.CONTEXT都取自子表B1,然后当作临时子表C13)D表中取出同时满足
D.HELP_CYPHER = A.ITEM_CYPHER                   
AND D.HELP_VAR = A.ITEM_VAR                         
AND D.HELP_PCS = A.ITEM_PCS                         
AND D.ATOM_LANGUAGE = 'EN'                          
AND D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR 
条件的record,我的问题是,因为
B.HELP_CYPHER = A.ITEM_CYPHER                   
AND B.HELP_VAR = A.ITEM_VAR                         
AND B.HELP_PCS = A.ITEM_PCS
那么
C.ATOM_LANGUAGE = B.ATOM_LANGUAGE               
AND C.HELP_CYPHER = B.HELP_CYPHER                   
AND C.HELP_VAR = B.HELP_VAR                         
AND C.HELP_PCS = B.HELP_PCS                         
AND C.CONTEXT = B.CONTEXT

D.HELP_CYPHER = A.ITEM_CYPHER                   
AND D.HELP_VAR = A.ITEM_VAR                         
AND D.HELP_PCS = A.ITEM_PCS                         
AND D.ATOM_LANGUAGE = 'EN'
的取法其实是等价的吗?
还是有什么差别?还有D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR
这句话可以用其他形式改写或者能不能去掉这句
然后在select的结果中添加
SELECT DISTINCT D.HELP_TITLE AS MAIN_HELP_TITLE     
, C.HELP_TITLE AS TOPIC_HELP_TITLE                  
, C.HELP_CYPHER                                     
, C.HELP_VAR                                        
, C.HELP_PCS                                        
, C.CONTEXT 
, D.CONTEXT
, A.ITEM_CYPHER
, A.ITEM_VAR
在结果中,再次筛选 D.CONTEXT= A.ITEM_CYPHER+A.ITEM_VAR的record我现在碰到的问题的是在VB下用createsnapshot通过OTG10 读取这段select,但是D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR
这句加上后就出错,如果不加就没问题
而且在OTG8中用createsnapshot读取就完全正常
不知道为什么
请各位高手不吝赐教
多谢

解决方案 »

  1.   

    D.CONTEXT = "A.ITEM_CYPHER" || "A.ITEM_VAR"
      

  2.   

    哦,对VB中自然是有引号的
    Query = Query & " AND D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR"我觉得问题应该不是VB本身语法错
    因为同样的数据库,我用同样的VB程序通过OTG8连接是好用的
    但是通过OTG10连接却出错,所以我才往oracle本身的问题方面考虑另外,这段通过SQL*PLUS运行也是好的
    所以我在想,是不是有可能是C表D表相同会有问题
    或者用其他方式改写D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR能不能行?呵呵,说到底还是对oracle语法不熟
    这段select看得模模糊糊的
      

  3.   


    AND D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR        --改成:
    AND D.CONTEXT LIKE '%'||A.ITEM_CYPHER||'%'
    AND D.CONTEXT LIKE '%'||A.ITEM_VAR||'%'  
      

  4.   

    在VB下用createsnapshot通过OTG10 读取这段select... ...后就出错
    在OTG8中用createsnapshot读取就完全正常 
    =====================================================================
    放到 VB 板块更合适。呵呵
      

  5.   

    谢谢各位,这几天公司网络抽风,今天才好些,可以来看看
    VB版我放过了,没啥反应
    我后来详细的查了下,发现是D.CONTEXT 的问题,好像有了这个column就会报错
    我只能把代码改为下文所示的样子,多加了A.ITEM_CYPHER;A.ITEM_VAR;D.CONTEXT
    这三个column
    然后在这次query的结果中,再取
    D.CONTEXT = A.ITEM_CYPHER+A.ITEM_VAR的结果
    不过始终没有想通,为啥D.CONTEXT就是不能用
    而我在oracle8里面就一切ok
    不知道是不是在这两个版本里面D.CONTEXT的属性有什么奥妙SELECT DISTINCT D.HELP_TITLE AS MAIN_HELP_TITLE
    , C.HELP_TITLE AS TOPIC_HELP_TITLE
    , C.HELP_CYPHER
    , C.HELP_VAR
    , C.HELP_PCS
    , C.CONTEXT
    , A.ITEM_CYPHER                        ------------------> new added
    , A.ITEM_VAR                               ------------------> new added
    , D.CONTEXT As TEMP_CONTEXT  -----------------> new added and I have to rename the column value, otherwise the D.CONTEXT is still not work.
    FROM  scmssa.A_PACK_ITEM_02 A
    , scmssa.A_HELP_KEY_01 B
    , scmssa.A_HELP_TITLE_01 C
    , scmssa.A_HELP_TITLE_01 D
    WHERE A.PACK_CYPHER = 'NE6A'
    AND A.PACK_VAR = 'AA'
    AND A.PACK_PCS = '04'
    AND B.ATOM_LANGUAGE = 'EN'
    AND B.HELP_CYPHER = A.ITEM_CYPHER
    AND B.HELP_VAR = A.ITEM_VAR
    AND B.HELP_PCS = A.ITEM_PCS
    AND C.ATOM_LANGUAGE = B.ATOM_LANGUAGE
    AND C.HELP_CYPHER = B.HELP_CYPHER
    AND C.HELP_VAR = B.HELP_VAR
    AND C.HELP_PCS = B.HELP_PCS
    AND C.CONTEXT = B.CONTEXT
    AND D.HELP_CYPHER = A.ITEM_CYPHER
    AND D.HELP_VAR = A.ITEM_VAR
    AND D.HELP_PCS = A.ITEM_PCS
    AND D.ATOM_LANGUAGE = 'EN'
                        //AND D.CONTEXT = A.ITEM_CYPHER || A.ITEM_VAR  -------------------->delete this condition
    ORDER BY 1,2;