2010-05-25 4 views
0

Je travaille à l'implémentation d'une connexion de données entre mon application C# et une base de données SQL Server Express. S'il vous plaît gardez à l'esprit que je n'ai pas travaillé avec des requêtes SQL avant.Comment construire une requête SQL

je les tableaux pertinents suivants:

ArticlesCommon 
ArticlesLocalized 
CategoryCommon 
CategoryLocalized 

Le tableau ArticlesCommon détient la langue des informations indépendantes telles que le prix, le poids, etc.

Ceci est la déclaration pour le moment:

SELECT * 
    FROM ArticlesCommon 
    INNER JOIN ArticlesLocalized ON ArticlesCommon.ID = ArticlesLocalized.ID 
WHERE ArticlesLocalized.Language = @language 
ORDER BY ArticlesCommon.DateAdded 

ArticlesCommon contient un identifiant de catégorie pour chaque ligne. Maintenant, je veux l'utiliser pour rechercher les informations localisées dans CategoryLocalized et l'ajouter au résultat, quelque chose comme

SELECT *, CategoryLocalized.Name as CategoryName. 

Si j'ai obtenu mon point de, est-ce faisable?

Edit:

Une autre question cependant. Les deux ArticlesLocalized et ArticlesCommon contiennent ID, qui sont naturellement les mêmes. Je veux sélectionner tout de ArticlesCommon mais tout sauf ID de ArticlesLocalized .. Y at-il un moyen concis d'y parvenir?

Je suppose que

SELECT * FROM .....

rendement toutes les colonnes de toutes les tables jointes?

Répondre

0

d'ajouter une autre inscription

SELECT * FROM ArticlesCommon c 
    JOIN ArticlesLocalized L 
     ON a.ID = L.ID 
    JOIN CategoryLocalized CL 
     ON CL.ID = c.CategoryID 
WHERE ArticlesLocalized.Language = @language 
ORDER BY ArticlesCommon.DateAdded 

Utiliser les jointures externes sinon chaque ligne de ArticlesCommon a une CategoryId

SELECT * FROM ArticlesCommon c 
    JOIN ArticlesLocalized L 
     ON a.ID = L.ID 
    Left [OUTER] JOIN CategoryLocalized CL 
     ON CL.ID = c.CategoryID 
WHERE ArticlesLocalized.Language = @language 
ORDER BY ArticlesCommon.DateAdded 
  • [OUTER] est facultatif, comme [gauche] implique OUTER
+0

Merci. Je souhaite que je puisse définir les deux réponses correctes, mais je vais mettre celui qui a répondu en premier, vu que vos réponses étaient très similaires. J'ai édité dans une autre question, si vous pouviez m'aider avec cela, je vous serais reconnaissant. – Max

1

quelle est la clé dont vous avez besoin pour JOIN

Est-ce que cela fonctionne?

SELECT * FROM ArticlesCommon 
INNER JOIN ArticlesLocalized ON 
ArticlesCommon.ID = ArticlesLocalized.ID 
INNER JOIN CategoryLocalized ON ArticlesCommon.ID = CategoryLocalized.ID 
WHERE ArticlesLocalized.Language = @language 
ORDER BY ArticlesCommon.DateAdded 
+0

Si CategoryLocalized.ID est la même information sur ArticlesLocalized.ID cela devrait fonctionner. Mais si @Max mélange des concepts, ce n'est pas le cas. Peut-être ArticlesCommon a un champ CategoryLocalizedID. Dans ce cas, il ajouterait cette ligne INNER JOIN CategoryLocalized sur ArticlesCommon.CategoryLocalizedID = CategoryLocalized.ID –

Questions connexes