如何通过引用第一个 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
中,我在 categoryid
和 companyid
中存储了 gameSubDetails
的 ID。
现在,如果我想根据 gameDetails
中的条件搜索 gameDetails
中的任何值,我如何才能获得 Category
和 Company
的名称来自 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 任何记录。
请提出处理此场景的最佳方法。
注意:CategoryId
和CompanyID
存储在同一个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'
这是假设提到的 gid
是 gameSubDetails
中提到的游戏 id
,尽管从您的评论听起来它可能存储了两个与 companyid 和类别编号。如果是这种情况,请将 gid
和 id
替换为 gameDetails
中与 gameSubDetails
中的字段完全匹配的任何字段 ,而不是只是一部分。
我是 SQL 服务器世界的新手。例如我有两个 tables
gameDetails(gid, name, categoryid, companyid, year)
和
gameSubDetails(id, name, delflag)
在 gameDetails
中,我在 categoryid
和 companyid
中存储了 gameSubDetails
的 ID。
现在,如果我想根据 gameDetails
中的条件搜索 gameDetails
中的任何值,我如何才能获得 Category
和 Company
的名称来自 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 任何记录。
请提出处理此场景的最佳方法。
注意:CategoryId
和CompanyID
存储在同一个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'
这是假设提到的 gid
是 gameSubDetails
中提到的游戏 id
,尽管从您的评论听起来它可能存储了两个与 companyid 和类别编号。如果是这种情况,请将 gid
和 id
替换为 gameDetails
中与 gameSubDetails
中的字段完全匹配的任何字段 ,而不是只是一部分。