sql server 多表查询

知足_常乐 发布于 2014/10/25 22:13
阅读 284
收藏 1

@天冰 你好,想跟你请教个问题:

表1
a001 5 a001 5 1
a002 1 a002 1 3 9
a009 6 a009 6
b610 9 b610 9
表2 c541 5 2
a001 1 d544 9
c541 5 q559 1
d544 9 e203 3
a002 3
表3
c541 2
q559 1
e203 3
a002 9

sql server 如何用命令把表1表2表3合并成右边这张表呀!

希望能得到回复哦,万分感谢!


加载中
0
0
静心天涯
静心天涯
两个左连接就应该就行了,用三次,合并结果集。如表1左连接表2左连接3,接接着是表2…,表3…
静心天涯
静心天涯
合并之后的列顺序需要处理一下
0
张乐1024
张乐1024

下面是测试好的语句,撸主只需要把表名和字段名换一下就可以了。其实是用了两次全连接,先用T1和T2全连接,再用T2和T3全连接(所以这里一定要注意,T2和T3连接时,ON语句里不能使用T1的字段,否则会导致结果可能不是你想要的)。然后判断第一列应该取T1\T2\T3三张表中的哪个第一列(因为表比较少,直接用笨方法,逐个判断是否为空),最后依次显示应该显示的列


SELECT CASE ISNULL(T1.C1T1, '') WHEN '' THEN 
(CASE ISNULL(T2.C1T2, '') WHEN '' THEN T3.C1T3 ELSE T2.C1T2 END) 
ELSE T1.C1T1 END, T1.C2T1, T2.C2T2, T3.C2T3 FROM T1
FULL JOIN T2 ON T1.C1T1 = T2.C1T2
FULL JOIN T3 ON T2.C1T2 = T3.C1T3


下面是运行效果图


下面是建表脚本

GO
/****** Object:  Table [dbo].[T1]    Script Date: 2014-10-26 09:09:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T1](
	[C1T1] [varchar](10) NULL,
	[C2T1] [varchar](10) NULL
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[T2]    Script Date: 2014-10-26 09:09:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T2](
	[C1T2] [varchar](10) NULL,
	[C2T2] [varchar](10) NULL
) ON [PRIMARY]

GO
/****** Object:  Table [dbo].[T3]    Script Date: 2014-10-26 09:09:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T3](
	[C1T3] [varchar](10) NULL,
	[C2T3] [varchar](10) NULL
) ON [PRIMARY]

GO
INSERT [dbo].[T1] ([C1T1], [C2T1]) VALUES (N'a001', N'5')
INSERT [dbo].[T1] ([C1T1], [C2T1]) VALUES (N'a002', N'1')
INSERT [dbo].[T1] ([C1T1], [C2T1]) VALUES (N'a009', N'6')
INSERT [dbo].[T1] ([C1T1], [C2T1]) VALUES (N'b610', N'9')
INSERT [dbo].[T2] ([C1T2], [C2T2]) VALUES (N'a001', N'1')
INSERT [dbo].[T2] ([C1T2], [C2T2]) VALUES (N'c541', N'5')
INSERT [dbo].[T2] ([C1T2], [C2T2]) VALUES (N'd544', N'9')
INSERT [dbo].[T2] ([C1T2], [C2T2]) VALUES (N'a002', N'3')
INSERT [dbo].[T3] ([C1T3], [C2T3]) VALUES (N'c541', N'2')
INSERT [dbo].[T3] ([C1T3], [C2T3]) VALUES (N'q559', N'1')
INSERT [dbo].[T3] ([C1T3], [C2T3]) VALUES (N'e203', N'3')
INSERT [dbo].[T3] ([C1T3], [C2T3]) VALUES (N'a002', N'9')




0
知足_常乐
知足_常乐

问题解决了,谢谢大家!!!


张乐1024
张乐1024
求设置最佳答案!!!
返回顶部
顶部