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

Sql 如何通过引用第一个表中的ID从第二个表中获取名称?,sql,sql-server,foreign-keys,primary-key,Sql,Sql Server,Foreign Keys,Primary Key,我是SQL Server世界的新手。例如,我有两张桌子 gameDetails(gid, name, categoryid, companyid, year) 及 在gameDetails中,我将gameSubDetails的ID存储在categoryid和companyid中 现在,如果我想根据gameDetails中的条件搜索gameDetails中的任何值,我如何从gameSubDetails中获取类别和公司的名称 例如,我想搜索gameDetails的所有值,其中year=2015

我是SQL Server世界的新手。例如,我有两张桌子

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

在gameDetails中,我将gameSubDetails的ID存储在categoryid和companyid中

现在,如果我想根据gameDetails中的条件搜索gameDetails中的任何值,我如何从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和g.catid=gsub.id以及.year='2015',它也不会返回任何记录

请建议处理此场景的最佳方式


注意:CategoryId和CompanyID存储在同一个表gameSubDetails中,只是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'

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

mysql或MSSQL Server?请删除与此处不相关的产品的标记-25年前,ANSI-92 SQL标准中使用正确的ANSI JOIN语法替换了旧式逗号分隔的表格列表样式,不鼓励使用该样式。您为什么不能直接从gameDetails查询年份?我想,当您选择相同的列并仅提供别名时因此不同,它在catid和compid.gsub.name中显示与catid相同的值,gsub.name显示为compid@Trushna是的,类别id和公司id在GameSubDetails中都是相同的,但id将不同
SELECT gsub.name
FROM gameSubDetails as gsub JOIN gameDetails as gd ON gsub.id = gd.gid
WHERE gd.year = '2015'