【发布时间】:2021-09-28 20:38:55
【问题描述】:
我遇到了 T-SQL 问题。该案例有两个表,期望从另一个表中左连接一行并连接不同的行以获得结果。
编辑案例: tabls
我的代码:
SELECT T1.ID,T2.BID,T2.FID,T3.FID,T3.PID,T4.PID,T4.Name,T5.FID
FROM T1
INNER JOIN T2 ON T2.BID = T1.ID
INNER JOIN T3 ON T3.FID = T2.FID
INNER JOIN T4 ON T4.PID = T3.PID
OUTER APPLY(SELECT TOP(1) T5.*,T3.PID FROM T5 INNER JOIN T3 ON T3.FID = T5.FID WHERE T5.BID = T2.BID AND T2.IsDone
= 1 AND T3.PID = T3.PID ORDER BY NEWID()) T5
我希望 T5.FID 没有重复
我两次得到这个 T5.FID
有表格 DDL 和示例插入数据。
CREATE TABLE [dbo].[T1](
[ID] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[T2](
[BID] [int] NOT NULL,
[FID] [int] NOT NULL,
[IsDone] [bit] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[T3](
[FID] [int] NOT NULL,
[PID] [int] NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[T4](
[PID] [int] NOT NULL,
[Name] [varchar](50) NOT NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[T5](
[FID] [int] NOT NULL,
[BID] [int] NOT NULL
) ON [PRIMARY]
GO
INSERT [dbo].[T1] ([ID]) VALUES (1);
INSERT [dbo].[T1] ([ID]) VALUES (2);
INSERT [dbo].[T1] ([ID]) VALUES (3);
INSERT [dbo].[T1] ([ID]) VALUES (4);
INSERT [dbo].[T2] ([BID], [FID], [IsDone]) VALUES (1, 12, 1);
INSERT [dbo].[T2] ([BID], [FID], [IsDone]) VALUES (2, 13, 1);
INSERT [dbo].[T2] ([BID], [FID], [IsDone]) VALUES (2, 14, 1);
INSERT [dbo].[T2] ([BID], [FID], [IsDone]) VALUES (2, 15, 1);
INSERT [dbo].[T2] ([BID], [FID], [IsDone]) VALUES (2, 16, 0);
INSERT [dbo].[T2] ([BID], [FID], [IsDone]) VALUES (3, 17, 0);
INSERT [dbo].[T2] ([BID], [FID], [IsDone]) VALUES (4, 18, 0);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (12, 2);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (13, 3);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (14, 3);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (15, 3);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (16, 3);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (17, 4);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (18, 5);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (19, 3);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (20, 3);
INSERT [dbo].[T3] ([FID], [PID]) VALUES (21, 3);
INSERT [dbo].[T4] ([PID], [Name]) VALUES (2, N'A');
INSERT [dbo].[T4] ([PID], [Name]) VALUES (3, N'B');
INSERT [dbo].[T4] ([PID], [Name]) VALUES (4, N'C');
INSERT [dbo].[T4] ([PID], [Name]) VALUES (5, N'D');
INSERT [dbo].[T5] ([FID], [BID]) VALUES (19, 2);
INSERT [dbo].[T5] ([FID], [BID]) VALUES (20, 2);
INSERT [dbo].[T5] ([FID], [BID]) VALUES (21, 2);
【问题讨论】:
-
请将示例数据和预期结果发布为文本而不是图像。最好在 DML 中,这样我们就可以轻松地重新创建它。
-
为什么
Table1中有多个相同 行?这通常是设计缺陷的标志。 -
@Larnu 这是第二个开发项目,实际上有很多表,而不是两个表。我想使用左连接,结果不是同一行。
-
看起来像 CSC540 作业。 :)
-
所以在SOF中,“如何提出一个好问题”是非常重要的。首先,不要粘贴源代码的图像。没有人会手动输入图像中的所有文本。第二。创建明确的表 DDL 和示例插入数据。第三,做一个“我期望的”(数据行),而不仅仅是描述。这些是我的一些希望,可以提供帮助。
标签: sql-server tsql sql-server-2012