なぜ他の人がまだこれを言っていないのかわかりません。
ノーマライズ。
競技を模した表はありますか?競技会は競技者で構成されていますか? 1 つまたは複数の競技会の競技者の個別のリストが必要です......
次のテーブルが必要です.....
CREATE TABLE Competitor (
[CompetitorID] INT IDENTITY(1,1) PRIMARY KEY
, [CompetitorName] NVARCHAR(255)
)
CREATE TABLE Competition (
[CompetitionID] INT IDENTITY(1,1) PRIMARY KEY
, [CompetitionName] NVARCHAR(255)
)
CREATE TABLE CompetitionCompetitors (
[CompetitionID] INT
, [CompetitorID] INT
, [Score] INT
, PRIMARY KEY (
[CompetitionID]
, [CompetitorID]
)
)
コンペティションコンペティターズ.コンペティションIDとコンペティターIDに制約があり、他のテーブルを指しています。
この種のテーブル構造では (キーはすべて単純な INTS です)、モデルに適合する適切な NATURAL KEY がないように思われるため、ここでは SURROGATE KEY が適していると思います。
したがって、これがある場合、特定の競技会の競合他社の個別のリストを取得するには、次のようなクエリを発行できます。
DECLARE @CompetitionName VARCHAR(50) SET @CompetitionName = 'London Marathon'
SELECT
p.[CompetitorName] AS [CompetitorName]
FROM
Competitor AS p
WHERE
EXISTS (
SELECT 1
FROM
CompetitionCompetitor AS cc
JOIN Competition AS c ON c.[ID] = cc.[CompetitionID]
WHERE
cc.[CompetitorID] = p.[CompetitorID]
AND cc.[CompetitionName] = @CompetitionNAme
)
また、競合他社が参加している各競技のスコアが必要な場合は、次のようになります。
SELECT
p.[CompetitorName]
, c.[CompetitionName]
, cc.[Score]
FROM
Competitor AS p
JOIN CompetitionCompetitor AS cc ON cc.[CompetitorID] = p.[CompetitorID]
JOIN Competition AS c ON c.[ID] = cc.[CompetitionID]
また、新しい競合他社との新しい競合がある場合は、競合他社テーブルに既に存在するものを確認するだけです。それらが既に存在する場合は、それらの競合他社に対して競合他社に挿入せず、新しい競合他社に対して挿入します。
次に、新しいコンペティションをコンペティションに挿入し、最後にすべてのリンクをコンペティションコンペティターに作成します。