对具有多个一对多关系的 1 个表进行建模的最佳方法是什么。
使用上述模式,如果 Report 包含 1 行,Grant 2 行和 Donation 12。当我将这三者连接在一起时,我最终得到一个笛卡尔积和 24 的结果集。 Report 加入 Grant 并创建 2 行,然后 Donation 加入该行做24行。
有没有更好的方法来模拟这个以避免caresian product?
示例代码
DECLARE @Report
TABLE (
ReportID INT,
Name VARCHAR(50)
)
INSERT
INTO @Report
(
ReportID,
Name
)
SELECT 1,'Report1'
DECLARE @Grant
TABLE (
GrantID INT IDENTITY(1,1) PRIMARY KEY(GrantID),
GrantMaker VARCHAR(50),
Amount DECIMAL(10,2),
ReportID INT
)
INSERT
INTO @Grant
(
GrantMaker,
Amount,
ReportID
)
SELECT 'Grantmaker1',10,1
UNION ALL
SELECT 'Grantmaker2',999,1
DECLARE @Donation
TABLE (
DonationID INT IDENTITY(1,1) PRIMARY KEY(DonationID),
DonationMaker VARCHAR(50),
Amount DECIMAL(10,2),
ReportID INT
)
INSERT
INTO @Donation
(
DonationMaker,
Amount,
ReportID
)
SELECT 'Grantmaker1',10,1
UNION ALL
SELECT 'Grantmaker2',3434,1
UNION ALL
SELECT 'Grantmaker3',45645,1
UNION ALL
SELECT 'Grantmaker4',3,1
UNION ALL
SELECT 'Grantmaker5',34,1
UNION ALL
SELECT 'Grantmaker6',23,1
UNION ALL
SELECT 'Grantmaker7',67,1
UNION ALL
SELECT 'Grantmaker8',78,1
UNION ALL
SELECT 'Grantmaker9',98,1
UNION ALL
SELECT 'Grantmaker10',43,1
UNION ALL
SELECT 'Grantmaker11',107,1
UNION ALL
SELECT 'Grantmaker12',111,1
SELECT *
FROM @Report r
INNER JOIN
@Grant g
ON r.ReportID = g.ReportID
INNER JOIN
@Donation d
ON r.ReportID = d.ReportID
更新 1 2011-03-07 15:20
为到目前为止的反馈干杯,为了添加到这个场景中,还有 15 个其他的一对多关系来自一个报告表。由于各种业务原因,这些表不能组合在一起。