Ne sais pas pourquoi personne d'autre n'a pas dit cela encore;
NORMALISER.
Vous avez une table que les modèles de compétitions? Les compétitions sont constitués de Concurrents? Vous avez besoin d'une liste distincte de Concurrents dans une ou plusieurs Compétitions......
Vous devriez avoir les tableaux suivants.....
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]
)
)
Avec des Contraintes sur CompetitionCompetitors.CompetitionID et CompetitorID pointant vers d'autres tables.
Avec ce type de structure de table, vos clés sont tous de simples ENTIERS -- il ne semble pas être une bonne CLÉ qui permettrait d'adapter le modèle donc je pense qu'une CLÉ de SUBSTITUTION est une bonne place ici.
Donc, si vous avez eu ce alors pour obtenir la liste distincte des concurrents dans un concours particulier, vous pouvez émettre une requête comme ceci:
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
)
Et si vous vouliez le score pour chaque concours, un concurrent est en:
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]
Et lorsque vous avez un nouveau la concurrence avec de nouveaux concurrents, alors il vous suffit de cocher celles qui existent déjà dans les Concurrents de la table. S'ils existent déjà, alors vous ne l'insérez pas en Concurrent pour les Concurrents et faire des insert pour les nouveaux.
Ensuite, vous insérez la nouvelle Concurrence de la Concurrence et, enfin, vous venez de faire tous les liens dans CompetitionCompetitors.