2017-08-08 3 views
-2

Je suis nouveau dans le monde SQL Server. J'ai deux tables par exempleComment obtenir le nom de la deuxième table en se référant à un ID de la première table?

gameDetails(gid, name, categoryid, companyid, year) 

et

gameSubDetails(id, name, delflag) 

En gameDetails j'ai emmagasinés ids de gameSubDetails dans categoryid et companyid.

Maintenant, si je veux rechercher une valeur gameDetails en fonction des critères aussi de gameDetails, Comment puis-je obtenir le nom du Category et Company de gameSubDetails? Par exemple, je veux rechercher toutes les valeurs de gameDetailsyear = 2015.

J'ai donc écrit requête comme

select 
    g.gName, gsub.name as catid, gsub.name as compid 
from 
    gameMaster g, gameSubDetails gsub 
where 
    g.compid = gsub.id 
    and g.year = '2015' 

Mais il ne montre que le nom de l'entreprise dans les deux (de catid, compid), mais même si je tente de mettre une autre condition where avec catid comme where g.compid = gsub.id and g.catid = gsub.id and .year='2015' il ne renvoie aucun enregistrement .

Veuillez indiquer quelle est la meilleure façon de travailler sur ce scénario.

Remarque: CategoryId et CompanyID sont stockés dans le même tableau gameSubDetails juste Id est différent. basé sur

+1

mysql ou (MS) SQL-Server? S'il vous plaît supprimer les balises pour les produits qui ne sont pas pertinents ici – Jens

+1

[Mauvaises habitudes à coup de pied: en utilisant les anciens JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to- kick-using-old-style-joins.aspx) - ce style de liste de tables * séparé par des virgules à l'ancienne * a été remplacé par la syntaxe * proper * ANSI 'JOIN' dans la norme SQL ANSI - ** 92 ** (** il y a 25 ans **) et son utilisation est déconseillée –

+0

Pourquoi ne pouvez-vous pas interroger 'year' directement à partir de' gameDetails'? –

Répondre

0

vous pouvez utiliser comme subselects

select g.gName 
, (select name from gameSubDetails where id = g.compid) as company 
, (select name from gameSubDetails where id = g.catid) as category 
from gameMaster g 
where g.year='2015' 

ou rejoint comme

select g.gName,comp.name,cat.name 
from gameMaster g 
left join gameSubDetails comp on g.compid = comp.id 
left join gameSubDetails cat on g.catid = cat.id 
where g.year='2015' 
+0

merci cela a bien fonctionné. –

0

Au meilleur de ma connaissance, vous cherchez à faire une jointure pour obtenir le nom de la gameSubDetails année en gameDetails. Specifics dépendra du goût particulier de SQL, mais en voici un:

SELECT gsub.name 
FROM gameSubDetails as gsub JOIN gameDetails as gd ON gsub.id = gd.gid 
WHERE gd.year = '2015' 

Cela suppose le gid mentionné est le jeu id mentionné dans gameSubDetails, bien que cela puisse paraître de vos commentaires comme il peut être stocker deux variables différentes qui correspondre le companyid et categoryid. Si tel est le cas, remplacez gid et id par n'importe quel champ de gameDetails qui correspond à un champ de gameSubDetailscomplètement, pas seulement une partie de celui-ci.