表
任务开始表 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
任务开始表 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
不应该是T1,T2吧 应该是TB1,TB2?
-- 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 行受影响)
*/
ID real T status
---------------------------------------------------------------
14 李四 T2 0T=T1没有完成的(任务开始表如果完成了再读任务结束表没有完成的)
ID real T status
-----------------------------------------------------------------
13 张三 TB1 0
任务开始表.status=1是必要必件。当条件T=T1时.查询的结果为任务结束表不存在T=TB1的,或者TB1.status=0的记录T=T1时的示例结果集
ID real T status
-----------------------------------------------------------------
13 张三 TB1 0 当T=T2时结果集是空的
-- 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 行受影响)
*/
任务开始表用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)但我发现如果用户以前作过任务并且完成了.哪用户再作时就找不符合的记录了.