SQL高手请帮忙写条SQL,谢谢

controstr 2010-01-02 12:23:19
各位SQL高手们,小弟搞C的,对SQL不太熟,因最近要用到SQL查询.
现在对如下几张表进行查询想得到下面的结果,但我搞来搞去都搞不好,前面提到过一个问题
http://topic.csdn.net/u/20100101/14/27fa8410-1dc9-4607-9815-0a537731c269.html
这里只有3张表进行查询,但有一张表没加进去,对filter,task,task_mobile这三张表进行查询有位高手给到了我一个答案,我很满意,但如果要同时对这四张表进行查询,得到我想要的结果,我怎么弄都弄不好.还请各位大大们帮帮忙.解决问题了我另再开贴给分,以表诚意.,小弟在此先谢过.


在此也先谢过 fredrickhu\ACMAIN_CHM二位高手.


CREATE TABLE filter_mobile(
filtertype int DEFAULT 0,
mobile nvarchar(20)
)
CREATE TABLE task(
taskid int DEFAULT 0,
filtertype int DEFAULT 0
)
CREATE TABLE task_mobile(
taskid int DEFAULT 0,
mobile nvarchar(20)
)
CREATE TABLE task_mobile_content(
taskid int DEFAULT 0,
mobile nvarchar(20),
txt nvarchar(50)
)

insert filter_mobile(filtertype,mobile) values(-1,'13800138000')
insert filter_mobile(filtertype,mobile) values(-1,'13800138001')
insert filter_mobile(filtertype,mobile) values(-1,'13800138002')
insert filter_mobile(filtertype,mobile) values(-1,'13800138003')
insert filter_mobile(filtertype,mobile) values(-1,13800138004)
insert filter_mobile(filtertype,mobile) values(0,13800138005)
insert filter_mobile(filtertype,mobile) values(0,13800138006)
insert filter_mobile(filtertype,mobile) values(0,13800138008)
insert filter_mobile(filtertype,mobile) values(0,13800138009)
insert filter_mobile(filtertype,mobile) values(-1,13800138010)
insert filter_mobile(filtertype,mobile) values(-1,13800138011)
insert filter_mobile(filtertype,mobile) values(-1,13800138012)
insert filter_mobile(filtertype,mobile) values(0,13800138014)
insert filter_mobile(filtertype,mobile) values(0,13800138015)
insert filter_mobile(filtertype,mobile) values(0,13800138007)
insert filter_mobile(filtertype,mobile) values(-1,13800138013)

insert task_mobile(taskid,mobile) values(1,13800138020)
insert task_mobile(taskid,mobile) values(1,13800138022)
insert task_mobile(taskid,mobile) values(1,13800138015)
insert task_mobile(taskid,mobile) values(1,13800138018)
insert task_mobile(taskid,mobile) values(1,13800138045)
insert task_mobile(taskid,mobile) values(1,13800138098)
insert task_mobile(taskid,mobile) values(1,13800138000)
insert task_mobile(taskid,mobile) values(1,13800138001)
insert task_mobile(taskid,mobile) values(1,13800138005)
insert task_mobile(taskid,mobile) values(1,13800138010)
insert task_mobile(taskid,mobile) values(1,13800138011)
insert task_mobile(taskid,mobile) values(1,13800138015)
insert task_mobile(taskid,mobile) values(2,13800138005)
insert task_mobile(taskid,mobile) values(1,13800138005)
insert task_mobile(taskid,mobile) values(1,13800138000)
insert task_mobile(taskid,mobile) values(2,13800138003)
insert task_mobile(taskid,mobile) values(2,13800138007)
insert task_mobile(taskid,mobile) values(2,13800138023)
insert task_mobile(taskid,mobile) values(2,13800138009)

insert task_mobile_content(taskid,mobile,txt) values(1,null,'测试')
insert task_mobile_content(taskid,mobile,txt) values(2,null,'4444')
insert task_mobile_content(taskid,mobile,txt) values(3,'13800138100','测试EXCEL')
insert task_mobile_content(taskid,mobile,txt) values(3,'13800138099','测试EXCEL')
insert task_mobile_content(taskid,mobile,txt) values(3,'13800138000','测试EXCEL')
insert task_mobile_content(taskid,mobile,txt) values(3,'13800138006','测试EXCEL')

insert task(taskid, filtertype) values(1,1)
insert task(taskid, filtertype) values(2,1)
insert task(taskid, filtertype) values(3,1)
-- 要求得到如下结果
/*
1,13800138020,测试
1,13800138022,测试
0,13800138015,测试
1,13800138018,测试
1,13800138045,测试
1,13800138098,测试
-1,13800138000,测试
-1,13800138001,测试
0,13800138005,测试
-1,13800138010,测试
-1,13800138011,测试
0,13800138015,测试
0,13800138005,4444
0,13800138005,测试
-1,13800138000,测试
-1,13800138003,4444
1,13800138100,测试EXCEL
1,13800138099,测试EXCEL
-1,13800138000,测试EXCEL
0,13800138006,测试EXCEL
0,13800138007,4444
1,13800138023,4444
0,13800138009,4444
*/
...全文
179 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 josy 的回复:]
说说你的结果是怎么来的?
[/Quote]
说说规则.
百年树人 2010-01-02
  • 打赏
  • 举报
回复
说说你的结果是怎么来的?
nianran520 2010-01-02
  • 打赏
  • 举报
回复

--测试数据我就不贴了
--建议楼主以后发帖说下规则,我们好理解点
select isnull(f.filtertype,h.filtertype) as filtertype,
isnull(r.mobile,t.mobile) as mobile,
r.txt
from task_mobile_content r left join task_mobile t
on r.taskid=t.taskid join task h
on r.taskid=h.taskid left join filter_mobile f
on isnull(r.mobile,t.mobile)=f.mobile
------------------------------------------------
1 13800138020 测试
1 13800138022 测试
0 13800138015 测试
1 13800138018 测试
1 13800138045 测试
1 13800138098 测试
-1 13800138000 测试
-1 13800138001 测试
0 13800138005 测试
-1 13800138010 测试
-1 13800138011 测试
0 13800138015 测试
0 13800138005 测试
-1 13800138000 测试
0 13800138005 4444
-1 13800138003 4444
0 13800138007 4444
1 13800138023 4444
0 13800138009 4444
1 13800138100 测试EXCEL
1 13800138099 测试EXCEL
-1 13800138000 测试EXCEL
0 13800138006 测试EXCEL

ACMAIN_CHM 2010-01-02
  • 打赏
  • 举报
回复
答题就象的破解密码,先得做特务分析别人的数据怎么来的。

select isnull(b.filtertype,c.filtertype),a.mobile,d.txt
from task_mobile a left join filter_mobile b on a.mobile=b.mobile
inner join task c on a.taskid=c.taskid
inner join task_mobile_content d on a. taskid=d.taskid
union all
select isnull(b.filtertype,c.filtertype),a.mobile,a.txt
from task_mobile_content a left join filter_mobile b on a.mobile=b.mobile
inner join task c on a.taskid=c.taskid
where a.mobile is not null

1> select isnull(b.filtertype,c.filtertype),a.mobile,d.txt
2> from task_mobile a left join filter_mobile b on a.mobile=b.mobile
3> inner join task c on a.taskid=c.taskid
4> inner join task_mobile_content d on a. taskid=d.taskid
5> union all
6> select isnull(b.filtertype,c.filtertype),a.mobile,a.txt
7> from task_mobile_content a left join filter_mobile b on a.mobile=b.mobil
8> inner join task c on a.taskid=c.taskid
9> where a.mobile is not null
10> go
|mobile |txt
-----------|--------------------|----------------------------------------
1|13800138020 |测试
1|13800138022 |测试
0|13800138015 |测试
1|13800138018 |测试
1|13800138045 |测试
1|13800138098 |测试
-1|13800138000 |测试
-1|13800138001 |测试
0|13800138005 |测试
-1|13800138010 |测试
-1|13800138011 |测试
0|13800138015 |测试
0|13800138005 |4444
0|13800138005 |测试
-1|13800138000 |测试
-1|13800138003 |4444
0|13800138007 |4444
1|13800138023 |4444
0|13800138009 |4444
1|13800138100 |测试EXCEL
1|13800138099 |测试EXCEL
-1|13800138000 |测试EXCEL
0|13800138006 |测试EXCEL

(23 rows affected)
1>

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧