and B.ID in
这个是什么,表中没出现过啊,是不是B.BID

解决方案 »

  1.   

    select E.BUserID,E.CName,E.BID,A.AName,
    from A,
    (select B.BID,B.BUserID,C.CName
       from B,C
       where B.BUserID=C.CUserID
    ) E where A.AID=E.BID
      

  2.   

    select B.BUserID,      C.CName,     B.BID,     A.AName,
    from B,A,C
    where A.AID=B.BID and B.BUserID=C.CUserID我觉得就这样就行了
      

  3.   

    and B.ID in
    (
       select B.BID
       from B,C
       where B.BUserID=C.CUserID
    )
    你不觉得这个是多余的吗?
      

  4.   

    你是说吧BID和BUserId建立两个index?
    查询计划怎么跑?(按时Oracle新手!)SQL Analyzer能不能用?而且不会启动SQL Analyzer!要登录Management Server!老是不行!
      

  5.   

    select B.BUserID,      C.CName,     B.BID,     A.AName,
    from A,B,C
    where A.AID=B.BID and B.BUserID=C.CUserID就可以了.先创建 plan_table
    set autotrace traceonly
    就可以看到执行计划.还有一种方法就是不执行SQL,直接查看某个sql 的执行计划如下:
    1. 在当前用户下创建PLAN_TABLE:CREATE GLOBAL TEMPORARY TABLE PLAN_TABLE (STATEMENT_ID VARCHAR2(30) NULL, TIMESTAMP DATE NULL,
      REMARKS VARCHAR2(80) NULL, OPERATION VARCHAR2(30) NULL,
      OPTIONS VARCHAR2(30) NULL, OBJECT_NODE VARCHAR2(128) NULL,
      OBJECT_OWNER VARCHAR2(30) NULL, OBJECT_NAME VARCHAR2(30) NULL,
      OBJECT_INSTANCE NUMBER NULL, OBJECT_TYPE VARCHAR2(30) NULL,
      OPTIMIZER VARCHAR2(255) NULL, SEARCH_COLUMNS NUMBER NULL,
      ID NUMBER NULL, PARENT_ID NUMBER NULL, POSITION NUMBER NULL,
      COST NUMBER NULL, CARDINALITY NUMBER NULL, BYTES NUMBER NULL,
      OTHER_TAG VARCHAR2(255) NULL, PARTITION_START VARCHAR2(255) NULL,
      PARTITION_STOP VARCHAR2(255) NULL, PARTITION_ID NUMBER NULL, OTHER LONG NULL)
    ON COMMIT DELETE ROWS;(我已经在DRMSPDVP下创建好了)2. 运行如下SQL:DELETE FROM PLAN_TABLE;
    EXPLAIN PLAN SET STATEMENT_ID = '1'
    FOR
    SELECT * FROM DEALER WHERE DISTID=:a
    ;SELECT LPAD(' ',2*(LEVEL-1))||operation||' '||options
       ||' '||object_name
       ||' '||DECODE(id, 0, 'Cost = '||position) "Query Plan"
       FROM plan_table
       START WITH id = 0 AND statement_id = '1'
       CONNECT BY PRIOR id = parent_id AND statement_id ='1';注意:将红色部分替换为要解释的SQL即可.如果用Command的SQL包含参数符号'?',则要将'?'依次替换为:a, :b, ...等的参数形式.3. 上面的SQL将作如下格式的输出Query Plan
    ------------------------------------------------------------------------------------
    SELECT STATEMENT   Cost = 3
      TABLE ACCESS BY INDEX ROWID DEALER
        INDEX UNIQUE SCAN PK_DEALER上面是我最常看的输出形式,还有其他一些输出格式的SQL,可参考Oracle文档的Explain Plan命令
    4. 除了看索引外,有时表与表的Join方法以及Join的顺序也很重要,一些很特殊的情况下,Oracle可能选择
       了一个很慢的Execution Plan,这时要用Hints来调整
      

  6.   

    这里如果使用
    select B.BUserID,      C.CName,     B.BID,     A.AName,
    from A,B,C
    where A.AID=B.BID and B.BUserID=C.CUserID
    的话,就不是我想要的数据了!
    主要是首先不知道这个小组做的东西是什么,那么就要先找出来;然后再根据这些物品找出所有做的人!找出物品的语句是
    select B.BID
       from B,C
       where B.BUserID=C.CUserID
    然后再找人,
    select B.BUserID,      C.CName,     B.BID,     A.AName,
    from A,B,C
    where A.AID=B.BID and B.BUserID=C.CUserID
    and B.BID in
    (
       select B.BID
       from B,C
       where B.BUserID=C.CUserID
    ),其实这里还有很多要选择的select B.BUserid.....Sum(Func(),...
    这里有很多要选的东西,那么在select中放函数会不会有影响