sQL Server查询语句求帮助!!!!

Peng_baoqing 2013-03-19 03:40:14
Table1
MID PID(主键) AA
A001 A001-001 1
A001 A001-002 0
A001 A001-003 0
A001 A001-004 0
Table2
ID(主键) QID PID DD EE
1 XX01 A001-001 1 0
2 XX02 A001-002 0 0
3 XX02 A001-003 0 0
4 XX04 A001-003 0 0
5 XX05 A001-003 0 1

Table3
ID(主键) QID Name
1 XX02 张三
2 XX04 李四
3 XX05 王五
4 XX06 赵六
如何查询出这样的结果
Name PID DD EE AA
张三 A001-002 0 0 0
张三 A001-003 0 0 0
李四 A001-003 0 0 0
null A001-004 null null 0
最好用一条Sql语句或者一个存储过程查询出来!!!!
...全文
188 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peng_baoqing 2013-03-19
  • 打赏
  • 举报
回复
[quote=引用 4 楼 Beirut 的回复:] 如果我要是再加上个分页......你可不可以帮我实现下啊,最好效率高一点的分页
Peng_baoqing 2013-03-19
  • 打赏
  • 举报
回复
[quote=引用 4 楼 Beirut 的回复:] SQL code ? 版主就是版主,果然厉害!求罩求罩 求罩
md5e 2013-03-19
  • 打赏
  • 举报
回复
那你就只用加 aa is not null 或者把 OUTER 去掉试试
Peng_baoqing 2013-03-19
  • 打赏
  • 举报
回复
引用 3 楼 liuchaolin 的回复:
Select tb3.name,tb1.pid,tb2.dd,tb2.ee,tb1.aa From table1 tb1 LEFT OUTER JOIN table2 tb2 on tb2.pid=tb1.pid LEFT OUTER JOIN table3 tb3 on tb3.qid=tb2.qid
如果不加WHERE (tb1.AA = 0) AND (tb2.DD = 0) AND (tb2.EE = 0)你那把所有的记录都查询出来了,但是我必须得加上去这个where条件如果加上去就会少了最后那一条记录!!!不过看了你的sQl语句我发现我现在刚刚入门.... where条件可以为WHERE (tb1.AA <> 1) AND (tb2.DD <> 1) AND (tb2.EE <> 1)或者WHERE (tb1.AA = 0) AND (tb2.DD = 0) AND (tb2.EE = 0)
黄_瓜 2013-03-19
  • 打赏
  • 举报
回复
--> 测试数据:#Table1
IF OBJECT_ID('TEMPDB.DBO.#Table1') IS NOT NULL DROP TABLE #Table1
GO 
CREATE TABLE #Table1([MID] VARCHAR(4),[PID] VARCHAR(8),[AA] INT)
INSERT #Table1
SELECT 'A001','A001-001',1 UNION ALL
SELECT 'A001','A001-002',0 UNION ALL
SELECT 'A001','A001-003',0 UNION ALL
SELECT 'A001','A001-004',0

--> 测试数据:#Table2
IF OBJECT_ID('TEMPDB.DBO.#Table2') IS NOT NULL DROP TABLE #Table2
GO 
CREATE TABLE #Table2([ID] INT,[QID] VARCHAR(4),[PID] VARCHAR(8),[DD] INT,[EE] INT)
INSERT #Table2
SELECT 1,'XX01','A001-001',1,1 UNION ALL
SELECT 2,'XX02','A001-002',0,0 UNION ALL
SELECT 3,'XX02','A001-003',0,0 UNION ALL
SELECT 4,'XX04','A001-003',0,0 UNION ALL
SELECT 5,'XX05','A001-003',1,1

--> 测试数据:#Table3
IF OBJECT_ID('TEMPDB.DBO.#Table3') IS NOT NULL DROP TABLE #Table3
GO 
CREATE TABLE #Table3([ID] INT,[QID] VARCHAR(4),[Name] VARCHAR(4))
INSERT #Table3
SELECT 1,'XX02','张三' UNION ALL
SELECT 2,'XX04','李四' UNION ALL
SELECT 3,'XX05','王五' UNION ALL
SELECT 4,'XX06','赵六'
--------------开始查询--------------------------




SELECT  d.[Name] , a.[PID] , d.[DD] , d.[EE] , a.[AA]
FROM    #Table1 a
LEFT JOIN (
           SELECT b.[PID] , c.[Name],b.[DD] , b.[EE] 
           FROM #Table2 b
		   JOIN #Table3 c 
		   ON b.[QID]= c.[QID]
			  AND (b.[EE]<>1 OR b.[DD]<>1)
          ) d
ON      a.[PID] = d.[PID]
WHERE   a.aa = 0 


----------------结果----------------------------
/* 
Name	PID	DD	EE	AA
张三	A001-002	0	0	0
张三	A001-003	0	0	0
李四	A001-003	0	0	0
NULL	A001-004	NULL	NULL	0

 */
md5e 2013-03-19
  • 打赏
  • 举报
回复
Select tb3.name,tb1.pid,tb2.dd,tb2.ee,tb1.aa From table1 tb1 LEFT OUTER JOIN table2 tb2 on tb2.pid=tb1.pid LEFT OUTER JOIN table3 tb3 on tb3.qid=tb2.qid
Peng_baoqing 2013-03-19
  • 打赏
  • 举报
回复
引用 1 楼 Beirut 的回复:
null A001-004 null null 0 这个是什么情况?
也就是table1中的最后一条记录也查询出来
黄_瓜 2013-03-19
  • 打赏
  • 举报
回复
null A001-004 null null 0 这个是什么情况?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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