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

How to get name from second table by referring to an ID from first table?

我是 SQL 服务器世界的新手。例如我有两个 tables

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

gameSubDetails(id, name, delflag)

gameDetails 中,我在 categoryidcompanyid 中存储了 gameSubDetails 的 ID。

现在,如果我想根据 gameDetails 中的条件搜索 gameDetails 中的任何值,我如何才能获得 CategoryCompany 的名称来自 gameSubDetails?

例如,我想搜索 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) 中都只显示公司名称,但即使我尝试将另一个带有 catid 的条件放在 where g.compid = gsub.id and g.catid = gsub.id and .year='2015' 中,它也不会 return 任何记录。

请提出处理此场景的最佳方法。

注意:CategoryIdCompanyID存储在同一个tablegameSubDetails只是Id不同

您可以使用像

这样的子选择
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'

据我所知,您希望进行联接以根据 gameDetails 中的年份从 gameSubDetails 中获取名称。具体取决于 SQL 的具体口味,但这里有一个:

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

这是假设提到的 gidgameSubDetails 中提到的游戏 id,尽管从您的评论听起来它可能存储了两个与 companyid 和类别编号。如果是这种情况,请将 gidid 替换为 gameDetails 中与 gameSubDetails 中的字段完全匹配的任何字段 ,而不是只是一部分。