代理商表(agent)agent_no(代理商序列号) agent_id(Id) agent_name(姓名)用户表(cust)
cust_no(用户序列号) cust_id(Id) cust_name(姓名)账户表(acct)
acct_no(序列号) acct_id(Id) cust_no(用户序列号) agent_no(代理商序列号)现在已知账户表中的acct_di =1,显示出 代理商的姓名agent_name,用户的姓名cust_name
数据量比较大,如何写sql效率比较高.
相应的序列号都在oracle实现了序列化。

解决方案 »

  1.   

    先在acct表中查询出acct_di =1的账户信息,再与另外两张表关联
      

  2.   

    DECLARE @cust_no AS INT
    DECLARE @agent_no AS INT
    SELECT @cust_no=cust_no, @agent_no=agent_no FROM acct WHERE acct_id=1
    SELECT agent_name FROM agent WHERE agent_no=@agent_no
    SELECT cust_name FROM cust WHERE cust_no=@cust_no
    数据量比较大的话就不要用关联了,如果一定要用关联的话在检索条件中acct_id=1一定要写在最后。
    但是如果有关联的话数据库首先会建立迪卡尔积,所以不管怎么说都没有分开查循效率高。
      

  3.   

    先把acct_id(Id)=1的结果选择出来,然后再进行连接。
    select  agent_name,cust_name 
    from agent,acct
    where acct_di =1 and agent.agent_no =acct.agent_no
    可能语句方面打不到这个要求,很久没写SQL语句了。
      

  4.   

    代理商表(agent) agent_no(代理商序列号) agent_id(Id) agent_name(姓名) 用户表(cust) 
    cust_no(用户序列号) cust_id(Id) cust_name(姓名) agent_no(代理商序列号)账户表(acct) 
    acct_no(序列号) acct_id(Id) cust_no(用户序列号) agent_no(代理商序列号) 现在已知账户表中的acct_id =1,显示出 代理商的姓名agent_name,用户的姓名cust_name 
    数据量比较大,如何写sql效率比较高. 
    相应的序列号都在oracle实现了序列化。1.
    select a.agent_name,c.cust_name from agent_info a,cust c,acct ac 
    where ac.cust_no = c.cust_no and ac.agent_no = a.agent_no
    and ac.acct_id = 1;2.
    select a.agent_name,c.cust_name from agent_info a,cust c,acct ac 
    where ac.cust_no = c.cust_no and ac.agent_no = a.agent_no and c.agent_no = a.agent_no
    and ac.acct_id = 1;解答1和2的区别和效率。
    谢谢!
      

  5.   

    楼主啥意思啊,2在agent_no字段上关联了3个表,1是两个表,相比1来说多了一个条件,你说哪个效率高呢?
      

  6.   

    ac.agent_no = a.agent_no
    c.agent_no = a.agent_no 
    因为是主键关联,所以效率几乎没有区别ac.agent_no和c.agent_no本来就算是数据冗余,但可以认为是必要的冗余
    所以两个where条件只要选择一个就可以了楼主要考虑的是如果c.agent_no变了,你想要得到的是什么数据,哪个关联才是正确的
      

  7.   

    select agent_name,cust_name
    from agent,cust,(select agent_no,cust_no from acct acct_di =1 ) as acct 
    where agent.agent_no=acct.agent_no and acct.cust_no =cust.cust_no
    在相关的Select 里,如果知道多少行最好加上列出行,