2017-08-08 19 views
-2

私はSQL Serverの世界で初めてです。私は例IはcategoryidcompanyidgameSubDetailsのIDを保存したgameDetails最初のテーブルのIDを参照して2番目のテーブルから名前を取得する方法は?

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

gameSubDetails(id, name, delflag) 

のための2つのテーブルを持っています。今、私はまたgameDetailsからの基準に基づいてgameDetailsの任意の値を検索したい場合は

は、どのように私はgameSubDetailsからCategoryCompanyの名前を得ることができますか?

例えば、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)で唯一の企業名を示しているが、私はwhere g.compid = gsub.id and g.catid = gsub.id and .year='2015'のようなCATIDとの条件は、それがレコードを返さない場合、別のを入れてみても、 。

このシナリオを実行するには、どのような方法がよいかお勧めします。

注:CategoryIdCompanyIDは同一のテーブルに格納されていますgameSubDetails Idが異なるだけです。

+1

mysqlまたは(MS)SQL-Server?ここに関係のない商品のタグを削除してください – Jens

+1

[古いスタイルのJOINを使用して習慣が悪い](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-古いスタイルの*カンマで区切られたテーブル*スタイルのリストが、ANSI - ** 92 ** SQL標準の*適切な* ANSI 'JOIN'構文に置き換えられました** 25 years ** ago)、その使用はお勧めしません –

+0

'year'を' gameDetails'から直接照会できないのはなぜですか? –

答えて

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の味に依存するが、ここでは1です:

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

それがどの二つの異なる変数を格納することができるように、それはあなたのコメントから聞こえるが、これは、前述gidgameSubDetailsに言及したゲームidであると仮定しています会社IDとカテゴリIDに一致します。そのような場合は、gididを、gameDetailsのフィールドに置き換えます。フィールドは、gameSubDetails完全にのフィールドに一致します。

関連する問題