我有4个表,每个表里都有ClientID字段,用来记录是哪个客户的记录。表用来记录客户提交的问卷调查,一个表里可以存在一个客户的多张表,也就是说一个表里的ClientID是可以重复的,所以不能用left join关联。现在我要从这四个表中查询满足某些条件的sql语句该怎么写呢?

解决方案 »

  1.   

    比方说:表A   fileA  fileB ***** ClientID
                   *       *  *****   1
                  *        *  *****   1
                   *        *  *****  2表B   fileA  fileB ***** ClientID
           *        *  ******   1
            *       *   ******  2
           *        *   * ***** 2表C   fileA  fileB ***** ClientID
             *     *           1
              *     *  *****    1
              *     *  *****    2表D   fileA  fileB ***** ClientID
             *     *   ****     3
              *     *  *****    1
              *     *  *****    2也就是说每个表中都有ClientID字段,但每个表里可能有重复的ClientID,如表c有两个“1”,
    现在我要查询在这四个表中,满足某些条件的总的记录和总的ClientID有多少个,不知道我说清楚没有?
      

  2.   

    这样?
    select * 
    from(  
       select fileA,fileB,ClientID from 表a union all 
       select fileA,fileB,ClientID from 表b union all 
       select fileA,fileB,ClientID from 表c union all 
       select fileA,fileB,ClientID from 表d 
    )x
    where ……
      

  3.   

    谢谢 mengmou()mengmou() ,但是不是这样的哈,各个表的字段都是不一样的,fileA,fileB只是我随便写的用来表示字段的
      

  4.   


    DaysUpdate表数据:
            DaysUpdateID                    CreatedDate             ClientID
    3bf0fdd2-0c4d-4f11-a13f-0359949628c0 2007-07-11 15:15:46.497 108
    4d68240c-1b7d-4b2a-811b-b079d5554d5c 2007-07-11 15:06:38.107 108
    5cbf1e37-d776-40a3-a8c9-ee2b866ebc9e 2007-08-08 17:40:17.693 102
    60d2ca6a-0cbb-4556-b2c5-a23914316552 2007-07-11 16:20:26.090 102
    640a6fd5-b257-4b44-8e7c-47f853750de6 2007-07-11 15:29:29.793 107
    7b8f5ddb-3610-460d-ada1-92e272dd6bcf 2007-07-12 09:40:21.497 101
    880121db-f940-4bcc-81e0-c01f6d022b42 2007-08-08 17:43:01.817 102
    93cf6582-97cc-4cad-a358-5884266b1ddd 2007-08-08 14:13:17.443 102表Abuse数据
    abuseID    CratedDate                ClientID
    11 2007-07-10 17:12:42.030 106
    12 2007-07-11 16:08:42.077 108
    13 2007-07-11 16:09:12.513 108
    14 2007-07-11 16:09:46.467 108
    15 2007-07-11 16:10:30.920 113
    16 2007-07-11 16:16:23.873 98
    17 2007-07-11 16:18:53.653 107表Trauma 数据  TraumaID                               CreatedDate            ClientID
    364c7c18-ac01-47cb-9543-087d32952a3a 2007-08-08 17:40:41.693 102
    412a68a1-ac42-48db-8af7-19b64ed3a395 2007-07-10 17:39:20.217 106
    4afc36fe-ffff-444b-b1c7-e3fc472df8c8 2007-07-10 17:05:59.920 106
    5ae085e0-c184-43ee-988b-a79d4a7f84db 2007-07-10 17:20:45.187 108
    84c5870b-bfdd-410d-97e6-53c475fe2be9 2007-07-11 16:23:36.670 108表BaseLine数据
    BaseLIneID   CreateDate             ClientID
    103 2007-07-10 15:40:57.293 107
    104 2007-07-12 15:14:10.513 106
    106 2007-07-12 16:54:33.983 108
    107 2007-08-08 17:39:46.787 102
    100 2007-07-10 15:24:09.623 108
    101 2007-07-10 15:30:34.903 106
    2445     2007-07-11 16:22:33.793 108
    20 2007-08-08 17:40:32.333 102我是要根据一些查询条件,查询某个时间段里的合乎条件的记录,
      

  5.   

    比方说我要查在 2007-2-15到2007-3-5之间 某个字段一=“condition”的所有的记录有多少条啊,
    我知道如果ClientID是唯一的话,可以用join left 把4个表连起来就可以了 ,但现在有重复的数据就不能join left 做联合查询了,不知道我说明白没有?
      

  6.   

    这样说吧,比方表A:有这样的数据:
    字段一  Date         ClientID
    dd      2007-2-5      2
    dd      2007-3-5      1
    dd      2007-8-5      2
    dd      2007-9-5      3表B
    字段一  Date         ClientID
    dd3      2007-2-5      2
    dd3      2007-3-5      1
    ded      2007-8-5      2
    dwd      2007-9-5      2对于这两个表,我想查date 在2007-2-1 到 2007-8-5好的数据,得到的结果应该是:dd      2007-2-5      2   dd3      2007-2-5      2
    dd      2007-8-5      2   ded      2007-8-5      2
      

  7.   

    join之前先distinct一下不久没有重复的了?
      

  8.   

    不是,要产生笛卡尔集,比方说:select * from A g left join B t on g.ClientID=t.ClientID,得到的结果是6 而不是2