任务开始表                            T1:任务1的开始
ID             real                T                  status
----------------------------------------------------------
8              张三                T1                1             
10            张三                T2                 1
12            张三                T1                 1
14            李四                T2                  0任务结束表                             TB1:任务1的结束
ID             real                 T                  status
--------------------------------------------------------------
9              张三                TB1                 1          
11            张三                TB2                 1
13             张三                 TB1               0按任务查看
TB2没有完成的(读任务开始表)
ID            real                 T                  status
---------------------------------------------------------------
14            李四                 T2                  0TB1没有完成的(任务开始表如果完成了再读任务结束表没有完成的)
ID            real                 T                  status
-----------------------------------------------------------------
13            张三                 TB1                  0

解决方案 »

  1.   

    不能把T1=TB1作为条件!因为字符后面的数字是可变的!只能以real为连接条件
      

  2.   

    我觉得你 任务开始表里面的 T是不是有问题啊 
    不应该是T1,T2吧  应该是TB1,TB2?
      

  3.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2009-11-17 10:29:42
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[任务开始表]
    if object_id('[任务开始表]') is not null drop table [任务开始表]
    go 
    create table [任务开始表]([ID] int,[real] varchar(4),[T] varchar(2),[status] int)
    insert [任务开始表]
    select 8,'张三','T1',1 union all
    select 10,'张三','T2',1 union all
    select 12,'张三','T1',1 union all
    select 14,'李四','T2',0
    --> 测试数据:[任务结束表]
    if object_id('[任务结束表]') is not null drop table [任务结束表]
    go 
    create table [任务结束表]([ID] int,[real] varchar(4),[T] varchar(3),[status] int)
    insert [任务结束表]
    select 9,'张三','TB1',1 union all
    select 11,'张三','TB2',1 union all
    select 13,'张三','TB1',0
    --------------开始查询--------------------------
    select 
      a.*
    from
      [任务开始表] a
    left join
      [任务结束表] b
    on
      a.[real]=b.[real]
    where
      a.[status]=0 
    ----------------结果----------------------------
    /* ID          real T    status
    ----------- ---- ---- -----------
    14          李四   T2   0(1 行受影响)
    */
      

  4.   

    刚才公司停电了:(查询结果:按任务查询T=?,?可取值为任务开始表的T列T=T2没有完成的(读任务开始表)
    ID            real                T                  status
    ---------------------------------------------------------------
    14            李四                T2                  0T=T1没有完成的(任务开始表如果完成了再读任务结束表没有完成的)
    ID            real                T                  status
    -----------------------------------------------------------------
    13            张三                TB1                  0 
      

  5.   

    表结构的示例有点问题:
    任务开始表.status=1是必要必件。当条件T=T1时.查询的结果为任务结束表不存在T=TB1的,或者TB1.status=0的记录T=T1时的示例结果集
    ID            real                T                  status
    -----------------------------------------------------------------
    13            张三                TB1                  0 当T=T2时结果集是空的
      

  6.   

    任务开始表.status=1是必须保证的条件
      

  7.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2009-11-17 10:29:42
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[任务开始表]
    if object_id('[任务开始表]') is not null drop table [任务开始表]
    go 
    create table [任务开始表]([ID] int,[real] varchar(4),[T] varchar(2),[status] int)
    insert [任务开始表]
    select 8,'张三','T1',1 union all
    select 10,'张三','T2',1 union all
    select 12,'张三','T1',1 union all
    select 14,'李四','T2',0
    --> 测试数据:[任务结束表]
    if object_id('[任务结束表]') is not null drop table [任务结束表]
    go 
    create table [任务结束表]([ID] int,[real] varchar(4),[T] varchar(3),[status] int)
    insert [任务结束表]
    select 9,'张三','TB1',1 union all
    select 11,'张三','TB2',1 union all
    select 13,'张三','TB1',0
    --------------开始查询--------------------------
    select 
      distinct b.*
    from
      [任务开始表] a
    left join
      [任务结束表] b
    on
      a.[real]=b.[real]
    where
      a.t='t1' and b.status=0
    ----------------结果----------------------------
    /* ID          real T    status
    ----------- ---- ---- -----------
    13          张三   TB1  0(1 行受影响)
    */
      

  8.   

    任务结束表用T2作别名
    任务开始表用T1作别名可能写的表.示例列不对。表的设计意思是:先接受任务,T1.status=1.如果未接受T1.status=0.T2的内容来源于T1.status=1的记录.T2.status=0表示了A用户接受了任务。但没完成.其实我想问的是:
    我写的有问题的SQL大体意思是
    (找到T2里不存在T=tb1的用户)union all(T2表里T=tb1 and T2.status=0)但我发现如果用户以前作过任务并且完成了.哪用户再作时就找不符合的记录了.