【发布时间】:2010-10-24 18:41:55
【问题描述】:
我有三张桌子
- A:A.pID 主键,A.Name nvarchar(250)
- B:B.pID 主键,B.Name nvarchar(250)
- C: C.pID 主键,C.Name nvarchar(250)
A 和 B 之间存在 m 到 n 关系(表 lA_B 主键为 lA_B.pID 和 .pInstanceA 表 A 的外键和 .pInstanceB 表 B 的外键)
A 和 C 之间存在 m 对 n 关系(table lA_C 主键 lA_C.pID 和 .pInstanceA 表 A 的外键和 .pInstanceB 表 C 的外键)
- A1 与 B1、B2 和 C1 相关
- A2 与 B3 和 C2、C3 相关
- A3 与 B4 相关
- A4 与 C4 相关
- A5 没有关系
这是我的 SQL:
CREATE TABLE [dbo].[A]( [pID] [bigint] NOT NULL, [Name] [nvarchar](250) NULL )
CREATE TABLE [dbo].[B]( [pID] [bigint] NOT NULL, [Name] [nvarchar](250) NULL )
CREATE TABLE [dbo].[C]( [pID] [bigint] NOT NULL, [Name] [nvarchar](250) NULL)
CREATE TABLE [dbo].[lA_B]( [pID] [bigint] NOT NULL, [pInstanceA] [bigint] NULL, [pInstanceB] [bigint] NULL )
CREATE TABLE [dbo].[lA_C]( [pID] [bigint] NOT NULL, [pInstanceA] [bigint] NULL, [pInstanceB] [bigint] NULL )
INSERT INTO [dbo].[A] ([pID] ,[Name]) VALUES (1,'A1')
INSERT INTO [dbo].[A] ([pID] ,[Name]) VALUES (2,'A2')
INSERT INTO [dbo].[A] ([pID] ,[Name]) VALUES (3,'A3')
INSERT INTO [dbo].[A] ([pID] ,[Name]) VALUES (4,'A4')
INSERT INTO [dbo].[A] ([pID] ,[Name]) VALUES (5,'A5')
INSERT INTO [dbo].[B] ([pID] ,[Name]) VALUES (1,'B1')
INSERT INTO [dbo].[B] ([pID] ,[Name]) VALUES (2,'B2')
INSERT INTO [dbo].[B] ([pID] ,[Name]) VALUES (3,'B3')
INSERT INTO [dbo].[B] ([pID] ,[Name]) VALUES (4,'B4')
INSERT INTO [dbo].[C] ([pID] ,[Name]) VALUES (1,'C1')
INSERT INTO [dbo].[C] ([pID] ,[Name]) VALUES (2,'C2')
INSERT INTO [dbo].[C] ([pID] ,[Name]) VALUES (3,'C3')
INSERT INTO [dbo].[C] ([pID] ,[Name]) VALUES (4,'C4')
INSERT INTO [dbo].[lA_B] ([pID],[pInstanceA],[pInstanceB]) VALUES (1,1,1)
INSERT INTO [dbo].[lA_B] ([pID],[pInstanceA],[pInstanceB]) VALUES (2,1,2)
INSERT INTO [dbo].[lA_B] ([pID],[pInstanceA],[pInstanceB]) VALUES (3,2,3)
INSERT INTO [dbo].[lA_B] ([pID],[pInstanceA],[pInstanceB]) VALUES (4,3,4)
INSERT INTO [dbo].[lA_C] ([pID],[pInstanceA],[pInstanceB]) VALUES (1,1,1)
INSERT INTO [dbo].[lA_C] ([pID],[pInstanceA],[pInstanceB]) VALUES (2,2,2)
INSERT INTO [dbo].[lA_C] ([pID],[pInstanceA],[pInstanceB]) VALUES (3,2,3)
INSERT INTO [dbo].[lA_C] ([pID],[pInstanceA],[pInstanceB]) VALUES (4,4,4)
这个查询:
SELECT
A.Name AS A,
B.Name AS B,
C.Name AS C
FROM
A
left JOIN lA_B ON (A.pID = lA_B.pInstanceA)
left JOIN B ON (B.pID = lA_B.pInstanceB)
left JOIN lA_C ON (A.pID = lA_C.pInstanceA)
left JOIN C ON (C.pID = lA_C.pInstanceB)
返回
A1 B1 C1 A1 B2 C1 A2 B3 C2 A2 B3 C3 A3 B4 空 A4 空 C4 A5 空 空现在的问题:-) 如何查询接收
A1 B1 空 A1 B2 空 A1 空 C1 A2 B3 空 A2 空 C2 A2 空 C3 A3 B4 空 A4 空 C4 A5 空 空问题是当我用 B 和 C 进行连接时,结果是 B C 的所有组合。我怎样才能消除这种情况?
【问题讨论】:
-
CREATE TABLE 语句似乎被缩短了,您可以编辑帖子并完整包含它们吗?
标签: sql join hierarchical-data cartesian-product