Что было бы лучшим способом смоделировать таблицу 1 с несколькими отношениями 1 ко многим.
С помощью приведенной выше схемы, если Отчет содержит 1 строку, Грант 2 строки и Пожертвование 12. Когда я объединяю эти три вместе, я получаю декартово произведение и набор результатов 24. Отчет соединяется с Грантом и создает 2 строки, затем Донор присоединяется к тому, чтобы сделать 24 ряда.
Есть ли лучший способ смоделировать это, чтобы избежать марихуаны?
пример кода
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 взаимосвязей 1 ко многим из одной таблицы отчета. Эти таблицы не могут быть сгруппированы по разным причинам.