我正在尝试写一个sp。我的要求如下:

表A:

ID是主键。

+ ---- + --------- +
| ID | Col1 |
+ ---- + --------- +
| 1 |样品1 |
| 2 | Sample2 |
+ ---- + --------- +

表B:

ID是主键。
Col1_Id是TableA的外键

+ ---- + --------- + ------- +
| ID | Col1_Id | Col2 |
+ ---- + --------- + ------- +
| 1 | 1 | TestA |
| 2 | 1 | TestB |
| 3 | 2 | TestC |
+ ---- + --------- + ------- +

表C:

ID是主键。

+ ---- + ------------------------ +
| ID | QusetionText |
+ ---- + ------------------------ +
| 1 |示例问题一? |
| 2 |示例问题二? |
| 3 |示例样品三? |
+ ---- + ------------------------ +

我的输出应该是;
表D:

ID是主键。
Col1_Id是TableA的外键
Col2_Id是TableB的外键

+ ---- + ------------ + --------- + --------- + ----------- ------------- +
| ID | QuestionId | Col1_Id | Col2_Id | QusetionText |
+ ---- + ------------ + --------- + --------- + ----------- ------------- +
| 1 | Q_2013 | 1 | 1 |示例问题一? |
| 2 | Q_2013 | 1 | 1 |示例问题二? |
| 3 | Q_2013 | 1 | 1 |示例问题三? |
| 4 | Q_2013 | 1 | 2 |示例问题一? |
| 5 | Q_2013 | 1 | 2 |示例问题二? |
| 6 | Q_2013 | 1 | 2 |示例问题三? |
| 7 | Q_2013 | 2 | 3 |示例问题一? |
| 8 | Q_2013 | 2 | 3 |示例问题二? |
| 9 | Q_2013 | 2 | 3 |示例问题三? |
+ ---- + ------------ + --------- + --------- + ----------- ------------- +

请告诉我如何编写查询以获取TableD。

预先感谢大家的答复。

最佳答案

看一下这个,

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Prathiba
-- Create date:
-- Description:
-- =============================================
 CREATE PROCEDURE SampleProc

 AS
 BEGIN
SET NOCOUNT ON;
           SELECT dbo.TableA.Id, dbo.TableB.Col1_Id, dbo.TableC.Id AS Col2_Id, dbo.TableC.QuestionText
           FROM   dbo.TableA INNER JOIN
                  dbo.TableB ON dbo.TableA.Id = dbo.TableB.Col1_Id CROSS JOIN
                  dbo.TableC
 END
 GO


请确保与您的TableC没有关系,即为什么使用交叉联接。

10-01 15:41