connect by 是结构化查询中用到的,其基本语法是:
select ... from tablename start by cond1
connect by cond2
where cond3;
简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
用上述语法的查询可以取得这棵树的所有记录。
其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。
COND3是过滤条件,用于对返回的所有记录进行过滤。
具体细节还是需要看看书,这个东东很有用的。

解决方案 »

  1.   

    楼上的有个笔误 应该是start with 
      

  2.   

    非常感谢chooser(chooser),我在application中用connect by对物料建bom结构时,报 connect by不能连接。我自己建的表没问题。请问用connect by有什么限制吗?
      

  3.   

    谢小风
    好像谈不上什么限制,把SQL放到GOLDEN,TOAD中看看,具体报什么错,具体位置在哪里?
    当然检查拼写,也是必要的,prior。
    我周一早上9:00要出差,周二回来。
      

  4.   

    select * from aa 
    start with assembly_item_id=52591
    connect by assembly_item_id=prior component_item_id语法应该没问题,我是用视图来建结构树的,视图又两个表生成。我把视图中的数据写到我自己建的表中建结构树就没问题。用视图时出现ora-01437:无法连接connect by 的错误对话框。
    视图:
    CREATE OR REPLACE VIEW AA AS
    (SELECT ALL BOM.BOM_BILL_OF_MATERIALS.ASSEMBLY_ITEM_ID, BOM.BOM_INVENTORY_COMPONENTS.COMPONENT_ITEM_ID, 
    BOM.BOM_INVENTORY_COMPONENTS.COMPONENT_QUANTITY
    FROM BOM.BOM_BILL_OF_MATERIALS, BOM.BOM_INVENTORY_COMPONENTS
    WHERE (BOM.BOM_BILL_OF_MATERIALS.BILL_SEQUENCE_ID=BOM.BOM_INVENTORY_COMPONENTS.BILL_SEQUENCE_ID))
      

  5.   

    用来建立二叉树的查询:
    create table menu (menuid number(7),refid number(7),caption varchar2(20))
    /
    select * from menu connect by refid=prior menuid start with refid is null;
      

  6.   

    Cause: A join operation was specified with a CONNECT BY clause. If a CONNECT BY clause is used in a SELECT statement for a tree-structured query, only one table may be referenced in the query. Action: Remove either the CONNECT BY clause or the join operation from the SQL statement. 
    的确是有限制,意思好像是说不能用于连接查询,你的视图中有连接,要不用个临时表吧。