CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

急求关于left join on ,在线等候

楼主Justin1818(木鱼5)2004-12-01 12:23:27 在 MS-SQL Server / 应用实例 提问

三表如下:  
  -------------  
  VENDOR_TAB       客户信息表  
        VD_ID  
        VD_ENAME  
        VD_CNAME  
        .......  
   
  VENDORMUL_TAB     客户别名表  
      VENDORMUL_ID  
      VENDORMUL_ENAME  
      VENDORMUL_CNAME  
      VENDORMUL_VDID         -----   对应   VENDOR_TAB.VD_ID  
      .....  
   
   
  VDVISIT_TAB       拜访客户的信息表  
        VDVISIT_ID  
        VDVISIT_VDID     -----   对应   VENDOR_TAB.VD_ID  
        VDVISIT_UID       -----   对应   USER_TAB.USER_ID     <   用户ID  
        ......  
   
   
  USER_TAB           系统用户表  
        USER_ID  
        USER_ENAME  
        USER_CNAME  
        USER_POSITION  
        .....  
   
   
   
  这张表是我要显示的   动态查询,  
  '--------------------------------------------------------  
  'VDVISIT_TAB                                                                                         '  
  '       VDVISIT_ID                                                                                     '    
  '       VDVISIT_VDID     -----   对应   VENDOR_TAB.VD_ID                       '  
  '       VDVISIT_UID       -----   对应   USER_TAB.USER_ID                       '    
  '--------------------------------------------------------  
  如何实现对VDVISIT_TAB表的查询     满足以下条件:       注意   是'VDVISIT_TAB表    
        vender   name:   _____       <   根据vendor   的名称,同时检索别名表   (同时检索中英文名)   >  
        user   name         ______  
   
  ------------------------  
  我试过下面出错  
    sqlA="select     *     From   VDVISIT_TAB"  
   
  <!-----------   if   search   by   vendor   name   -------------------------------->  
   
  sqlb="left   join   VENDOR_TAB   on   VDVISIT_TAB.VDVISIT_ID=VENDOR_TAB.VD_ID"_  
          &"left   join   VENDORMUL_TAB   on   VDVISIT_TAB.VDVISIT_ID=VENDORMUL_TAB.VENDORMUL_VDID"  
   
  sqlc="   where   (   VENDOR_TAB.VD_ENAME   like   '%   vendorname_param   %'   or   "_  
            &"                 VENDOR_TAB.VD_CNAME   like   '%   vendorname_param   %'   or     "_  
            &"                 VENDORMUL_TAB.VENDORMUL_ENAME   like   '%   vendorname_param   %'   or   "_  
            &"                 VENDORMUL_TAB.VENDORMUL_CNAME   like   '%   vendorname_param   %'   )   "  
   
  <!-------------------end   of   search   by   vendor   name   -------------------->        
   
   
  <!-----------------------if   search   by   User   name   ----------------------------->                          
   
  sqlb=sqlb   &   "   left   join   USER_TAB   on   VDVISIT_TAB.VDVISIT_UID=USER_TAB.USER_ID   "  
   
          <!----   if   sqlc   is   empty   then     ---->  
                sqlc=sqlc   &   "   where   USER_TAB.USER_NAME   like   '%   username_param   %'  
   
          <!-----else   if   sqlc   is   not   empty   then   --->  
                sqlc=sqlc   &   "   and   USER_TAB.USER_NAME   like   '%   username_param   %'  
   
   
  <!----------------------------end   search   by   user   name   ------------------------>  
   
  sql=sqlA   &   sqlB   &   sqlC  
  ....  
         
   
  Syntax   error   (missing   operator)   in   query   expression   'VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID   left   join   VENDORMUL_TAB   on   VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID'  
   
  谢谢 问题点数:0、回复次数:13Top

1 楼lsxaa(小李铅笔刀)回复于 2004-12-01 12:27:32 得分 0

先把整个sql         在程序中显示出来看看   是什么样的  
   
   
  Top

2 楼Justin1818(木鱼5)回复于 2004-12-01 12:46:19 得分 0

SQL显示如下:  
   
  select   *   from   VDVISIT_TAB   left   join   VENDOR_TAB   on   VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID   left   join   VENDORMUL_TAB   on   VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID   where   (   VENDOR_TAB.VD_ENAME   like   '%try%'   or   VENDOR_TAB.VD_CNAME   like   '%try%'   or   VENDORMUL_TAB.VENDORMUL_ENAME   like   '%try%'   or   VENDORMUL_TAB.VENDORMUL_CNAME   like   '%try%'   )Top

3 楼lsxaa(小李铅笔刀)回复于 2004-12-01 12:49:36 得分 0

语句看起来没有问题,有查询分析器么,放到里面执行一下,试试          
  select   *    
  from   VDVISIT_TAB    
            left   join   VENDOR_TAB   on   VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID    
            left   join   VENDORMUL_TAB   on   VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID    
  where   (   VENDOR_TAB.VD_ENAME   like   '%try%'   or    
                  VENDOR_TAB.VD_CNAME   like   '%try%'   or    
                  VENDORMUL_TAB.VENDORMUL_ENAME   like   '%try%'   or    
                  VENDORMUL_TAB.VENDORMUL_CNAME   like   '%try%'    
                )Top

4 楼Justin1818(木鱼5)回复于 2004-12-01 13:15:18 得分 0

查询分析器  
      错误信息:  
  Syntax   error   (missing   operator)   in   query   expression   'VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID   left   join   VENDORMUL_TAB   on   VDVISIT_TAB.VDVISIT_VDID=VENDORMUL_TAB.VENDORMUL_VDID'  
   
  一样  
   
  Top

5 楼lsxaa(小李铅笔刀)回复于 2004-12-01 13:53:24 得分 0

联接列的类型一致么????Top

6 楼lh1979(rocket)回复于 2004-12-01 15:04:18 得分 0

”select   *“   这边指定不明确  
  还有,你先两个表left   join,如果成功了,在加一个join,这样试一下,应该能找出问题Top

7 楼xingfuniao(幸福鸟)回复于 2004-12-01 15:19:20 得分 0

在每個引號的後面或前面都加個空格呢  
  例如  
  sqlb="   left   join   VENDOR_TAB   on   VDVISIT_TAB.VDVISIT_ID=VENDOR_TAB.VD_ID   "_       --  
          &"   left   join   VENDORMUL_TAB   onTop

8 楼Justin1818(木鱼5)回复于 2004-12-03 10:51:23 得分 0

一样的  
  还是同样的错误  
  啊....  
      郁闷啊...  
  Top

9 楼jiang130(Hong)回复于 2004-12-03 13:39:00 得分 0

sqla='('   +sqla   +')   as   a'  
  后面的都用a作別名Top

10 楼jiang130(Hong)回复于 2004-12-03 13:43:04 得分 0

你要么把三個子查詢都當成表來關聯,要么先關聯再寫where條件Top

11 楼Justin1818(木鱼5)回复于 2004-12-05 11:30:45 得分 0

具体怎么写呀  
  Top

12 楼Justin1818(木鱼5)回复于 2004-12-06 10:31:46 得分 0

我改写后如下,但是出现重复记录:  
        如果查询只要用到别名表,就会出现重复记录,    
      <别名中多了一新加了了一个字段MODSCODE这个code  
        系统代码,对于每个客户都有一个代码,同时别名也对就一个代码,这个代码如名称一一对应的   >  
        如果一个客户有三个别名,就会出现三条记录(其实是重复的),SQL查询指令这所以认为不是重复的是因为当前客户有不同的别名;因为这三个别名都对应同一个客户名称,所以用户要求只显示一条记录)  
    比如,  
    vendor   table   客户表  
  [vendor   id]       [vendor   chinese     name   ]   [vendor   english   name]   [vendor   mods   code   ]  
      1                             chinese   name   1                     english   name   1                 vendor   mods   code1  
  vendor   multi   table   客户别名表  
  [vendor   multi   id]   [vendor   multi   chinese   name]   [vendor   multi   english   name]   [vendor   multi   mods   code]   [vendor   id]  
    1                                         multi   chinese   name   1             multi   english   name   1                 multi   modscode1         1  
   
    2                                         multi   chinese   name   2             multi   english   name   2                 multi   modscode2         1  
       
    3                                         multi   chinese   name   3             multi   english   name   3                 multi   modscode3         1  
   
  SQL语句如下:  
  select   *   From   VDVISIT_TAB,VENDOR_TAB,VISITTYPE_TAB   ,VENDORMUL_TAB   WHERE   VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID   AND   VDVISIT_TAB.VDVISIT_TYPE=VISITTYPE_TAB.VISITTYPE_ID   AND   VENDOR_TAB.VD_ID=VENDORMUL_TAB.VENDORMUL_VDID   AND   (   VENDOR_TAB.VD_MODSCODE   LIKE   '%MODS   CODE%'   OR   VENDORMUL_TAB.VENDORMUL_MODSCODE   LIKE   '%MODS   CODE%'   )    
  --------------------------------------------------------------------------  
             
  用户要查找   mods   code   类似如   vendor   mods   code1  
  将会显示如下结果:  
  chinese   name   1         english   name   1         vendor   mods   code1     multi   mods   code   1  
  chinese   name   1         english   name   1         vendor   mods   code1     multi   mods   code   2  
  chinese   name   1         english   name   1         vendor   mods   code1     multi   mods   code   3  
   
                如何过滤?  
              同要求统计总的记录数?  
   
                 
  function   BuildSearchParamVdrA()  
  dim   sql  
  dim   midsql  
  dim   endsql  
   
    midsql=""  
    endsql=""  
   
   
   
  emptySqlA="select   count(*)   as   total   From     VDVISIT_TAB,VENDOR_TAB,VISITTYPE_TAB     "  
   
   
         
  sqlA="select   *   From   "_  
        &"   VDVISIT_TAB,VENDOR_TAB,VISITTYPE_TAB   "  
  sqlB=   "   WHERE   "_  
          &   "   VDVISIT_TAB.VDVISIT_VDID=VENDOR_TAB.VD_ID   AND   "_        
          &   "   VDVISIT_TAB.VDVISIT_TYPE=VISITTYPE_TAB.VISITTYPE_ID   "  
   
  '如果用户要求按客户的名称来查询,或按客户的mods   code   来查询都会牵涉到别名表  
  if   (vdrsel<>0   and   vdrselparam<>"")   and     vdrmodcode<>""   then    
          sqlA=sqlA   &   "   ,VENDORMUL_TAB   "  
  emptySqlA=emptySqlA   &   "   ,VENDORMUL_TAB   "  
   
    sqlB=sqlB   &   "   AND   VENDOR_TAB.VD_ID=VENDORMUL_TAB.VENDORMUL_VDID   "  
  end   if    
   
  if   (vdrsel=0   and   vdrselparam="")   and     vdrmodcode<>""   then    
        sqlA=sqlA   &   "   ,VENDORMUL_TAB   "  
  emptySqlA=emptySqlA   &   "   ,VENDORMUL_TAB   "  
   
    sqlB=sqlB   &   "   AND   VENDOR_TAB.VD_ID=VENDORMUL_TAB.VENDORMUL_VDID   "  
  end   if    
   
   
  if   vdrselparam<>""   then  
  select   case   vdrsel  
        case   1   :      
      sqlB=sqlB   &"   AND   (   VENDOR_TAB.VD_ENAME   LIKE   '%"&vdrselparam&"%'   OR   "_  
  &"               VENDOR_TAB.VD_CNAME   LIKE   '%"&vdrselparam&"%'   OR   "_  
  &"               VENDORMUL_TAB.VENDORMUL_ENAME   LIKE   '%"&vdrselparam&"%'   OR   "_  
  &"               VENDORMUL_TAB.VENDORMUL_CNAME   LIKE   '%"&vdrselparam&"%'   )   "  
        case   2   :  
    sqlB=sqlB   &   "   AND   VENDOR_TAB.VD_WEBSITE   LIKE   '%"&vdrselparam&"%'   "  
  end   select  
  end   if    
   
  if   vdrmodcode<>""   then      
                                    sqlB=sqlB   &   "   AND   (   VENDOR_TAB.VD_MODSCODE   LIKE   '%"&vdrmodcode&"%'   OR   "_  
                        &   "               VENDORMUL_TAB.VENDORMUL_MODSCODE   LIKE   '%"&vdrmodcode&"%'   )   "  
  end   if    
  if   vdrindexcode<>""   then     sqlB=sqlB   &   "   AND   VENDOR_TAB.VD_INDEXCODE   LIKE   '%"&vdrindexcode&"%'   "  
       
   
   
   
  '/***********Star   Search   Create/Update   author   /   Date   switch   condition    
  select   case       vdropersel  
                      case   1   :  
            if   vdroperparam<>""   then  
      emptySqlA=emptySqlA   &   "   ,USER_TAB   "    
   
      sqlA=sqlA     &"   ,USER_TAB   "    
      sqlB=sqlB     &"     AND   VDVISIT_TAB.VDVISIT_CREATEBY=USER_TAB.USER_ID   "_  
    &"     AND     USER_TAB.MSKID='"&vdroperparam&"'   "  
   
      if   vdrFrmdate<>""     and     vdrEndDate=""   then     sqlB=sqlB   &   "     AND     #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_CREATEDATE   "  
      if   vdrEndDate<>""     and     vdrFrmdate=""   then     sqlB=sqlB   &   "     AND     VDVISIT_TAB.VDVISIT_CREATEDATE<=#"&vdrEndDate&"#   "  
      if   vdrFrmdate<>""     and     vdrEndDate<>""   then   sqlB=sqlB   &   "     AND     #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_CREATEDATE   AND   VDVISIT_TAB.VDVISIT_CREATEDATE<=#"&vdrEndDate&"#   "  
   
      end   if    
   
                  case   2   :  
      if   vdroperparam<>""   then  
                      emptySqlA=emptySqlA   &   "   ,USER_TAB   "    
   
      sqlA=sqlA     &"   ,USER_TAB   "    
      sqlB=sqlB     &"     AND   VDVISIT_TAB.VDVISIT_UPDATEBY=USER_TAB.USER_ID   "_  
                                    &"     AND   USER_TAB.MSKID='"&vdroperparam&"'   "  
   
      if   vdrFrmdate<>""     and     vdrEndDate=""   then     sqlB=sqlB   &   "     AND     #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE   "  
      if   vdrEndDate<>""     and     vdrFrmdate=""   then     sqlB=sqlB   &   "     AND     VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"#   "  
      if   vdrFrmdate<>""     and     vdrEndDate<>""   then   sqlB=sqlB   &   "     AND     #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE   AND   VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"#   "  
      end   if  
   
                    case   0   :  
   
      if   vdrFrmdate<>""     and     vdrEndDate=""   then     sqlB=sqlB   &   "     AND     #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE   "  
      if   vdrEndDate<>""     and     vdrFrmdate=""   then     sqlB=sqlB   &   "     AND     VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"#   "  
      if   vdrFrmdate<>""     and     vdrEndDate<>""   then   sqlB=sqlB   &   "     AND     #"&vdrFrmdate&"#<=VDVISIT_TAB.VDVISIT_UPDATEDATE   AND   VDVISIT_TAB.VDVISIT_UPDATEDATE<=#"&vdrEndDate&"#   "  
   
  end   select    
  '/******************************************End   Search   Create/Update   author   /   Date   switch   condition    
     
  '/*****************************************Start   Search   by   Visit   way   ***************************  
  if   visitsel<>0   then     sqlB=sqlB   &   "   AND   VDVISIT_TAB.VDVISIT_TYPE="&visitsel   &"   "  
   
   
  BuildSearchParamVdrA=sqlA   &   sqlB    
  emptySql=emptySqlA   &     sqlB    
   
  end   function  
   
  Top

13 楼jiang130(Hong)回复于 2004-12-06 11:12:20 得分 0

1.建儀用別名代替那么長的表名  
  select   *   From   VDVISIT_TAB   d,VENDOR_TAB   a,VISITTYPE_TAB   b,VENDORMUL_TAB   c   WHERE   a.VDVISIT_VDID=b.VD_ID   AND   a.VDVISIT_TYPE=b.VISITTYPE_ID   AND   a.VD_ID=b.VENDORMUL_VDID   AND   (   a.VD_MODSCODE   LIKE   '%MODS   CODE%'   OR   a.VENDORMUL_MODSCODE   LIKE   '%MODS   CODE%'    
  2.如果你是用戶指定條件的查詢,建儀使用視圖  
  3.如果不方便使用視圖,應在前台用戶指定完條件后把它當成一個表,就象上面說的   sqla='('   +sqla   +')   as   a'   ,sqlb='('   +sqlb   +')   as   b'   再加聯接條件on   a.字段=b.字段   where   a.字段....Top

相关问题

  • 急!在线等候!
  • 在线等候,急!
  • 在线等候!急
  • 急!!!在线等候!!
  • 急,再线等候!!!!
  • 在线等候!急
  • 急!急!急!(在线等候)
  • 急急急,在线等候
  • 急!急!在線等候!
  • 急急!!!再线等候!!

关键词

  • 客户
  • vendormul
  • vdvisit
  • sqlb
  • tab
  • vdid
  • vd
  • vendor
  • sqla
  • vdrfrmdate

得分解答快速导航

  • 帖主:Justin1818

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo