如何通过引用第一个表中的ID从第二个表中获取名称?

时间:2017-08-08 06:37:10

标签: sql sql-server foreign-keys primary-key

我是SQL Server世界的新手。我有两个表格,例如

deleteNoticia(id){
    this._apiNoticias.deleteNoticia(id)
      .catch((err) => {
      console.log(err);
      });
    this.cd.markForCheck();
    this.ngOnInit();
  }

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

gameSubDetails(id, name, delflag) 我已在gameDetailsgameSubDetails中存储了categoryid的ID。

现在,如果我想根据companyid中的条件搜索gameDetails中的任何值,我怎样才能从gameDetailsCategory获取CompanygameSubDetails的名称{1}}?

例如,我想搜索gameDetails的所有值year = 2015

所以我把查询写成

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'

但它只显示两者中的公司名称(catid,compid),但即使我尝试将另一个条件与c where g.compid = gsub.id and g.catid = gsub.id and .year='2015'这样的条件放在一起,也不会返回任何记录。

请建议在这种情况下使用的最佳方法是什么。

注意:CategoryIdCompanyID存储在同一个表gameSubDetails中,只是ID不同。

2 个答案:

答案 0 :(得分:0)

您可以使用

等子选择
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'

或加入

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'

答案 1 :(得分:0)

据我所知,您希望根据gameSubDetails中的年份联接以获取gameDetails的名称。具体细节将取决于SQL的特定风格,但这里只有一个:

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

这假设提到的gidid中提到的游戏gameSubDetails,虽然它从您的评论中听起来可能存储了两个与companyid和categoryid匹配的不同变量。如果是这种情况,请将gidid替换为gameDetails中与gameSubDetails 完全中的字段匹配的任何字段,而不仅仅是它