2017-08-08 75 views
-2

我是SQL Server領域的新手。我有例如如何通過引用第一個表中的ID從第二個表中獲取名稱?

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

gameSubDetails(id, name, delflag) 

gameDetails我已經存儲的gameSubDetails IDS在categoryidcompanyid兩個表。

現在,如果我想搜索基於也是從gameDetails標準在gameDetails任何價值,我怎樣才能從gameSubDetailsCategoryCompany的名字嗎?

例如我想搜索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'它不返回任何記錄。

請建議什麼是在這種情況下工作的最佳方式。

注意:CategoryIdCompanyID存儲在同一個表gameSubDetails只是Id是不同的。

+1

mysql或(MS)SQL服務器?請刪除此處不相關產品的標籤 – Jens

+1

[踢壞的惡習:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to- kick-using-old-style-joins.aspx) - 在ANSI - ** 92 ** SQL標準中,舊式*表格樣式的舊式*逗號分隔列表已替換爲* proper * ANSI'JOIN'語法** 25年前**),不鼓勵使用 –

+0

爲什麼不能直接從'gameDetails'查詢'year'? –

回答

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' 
+0

感謝它運作良好。 –

0

盡我的理解,你希望做一個加盟基礎上,從gameSubDetails獲取名稱一年在gameDetails。具體細節將取決於SQL的哪些特定的味道,但這裏有一個:

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

這是假設提到gidgameSubDetails提到的遊戲id,雖然它從你的意見聽起來像可以存放兩個不同的變量,匹配companyid和categoryid。如果是這種情況,請將gidid替換爲來自gameDetails的任何字段,該字段與gameSubDetails完全匹配,而不僅僅是其中的一部分。

相關問題