2017-03-24 9 views
1

テーブル1213」と「テーブル246」という2つのテーブルがあります。SQL Server 2008でサブクエリを使用した内部結合の意味

'table123' 列: 'ID'、 'DEPT_ID'、 'FIRST_NAME'、 ''、 '給与'、 '住所'。

'table246' 列: 'DEPT_ID'、 'DEPT_NAME'。

Dept_Name」のそれぞれの平均給与を検索したいと思います。 「私は上記のクエリを実行すると、それは必要な2列名「DEPT_NAME」を与え、しかし

SELECT Dept_Name, alt.Average_Salary AS Avg_Salary 
FROM table123 a, table246 b, 
(SELECT Dept_ID, AVG(Salary)Avg_Salary 
FROM table123 
GROUP BY Dept_ID)alt 
WHERE a.Dept_ID = alt.Dept_ID 
AND a.Salary = alt.Average_Salary 
AND a.Dept_ID = b.Dept_ID; 

と:だから私は、サブクエリで等結合である、以下のクエリを使用してみましたAvg_Salary 'ですが、データはありません(空白のテーブルのみ)。

この空白の結果表の原因となっているコードで何が間違っていますか?

また、Inner- Joinを使用して同じ結果を得る別の方法がありますか? Equi-Joinはかなり混乱しています。

+0

完璧な質問をする方法について知るために参照リンクを参照します。https://spaghettidba.com/2015/04/24/how-to-post-at-sql-questionを-on-a-public-forum/ – TheGameiswar

+0

しかし、私の質問はT-SQLの質問ではありません – CrashBandicoot

+0

http://stackoverflow.com/questions/43002124/difference-between-equi-join-and-inner-join-in- sql – CrashBandicoot

答えて

3

は、FROM句にカンマを使用します。 常には、適切で明示的なJOIN構文を使用します。

が正確にの誰もいないため、結果が返されないため、給与条件は失敗します。あなたが選択されているものに基づいて、サブクエリは、あなたがしたいクエリです:

SELECT Dept_ID, AVG(Salary) as Avg_Salary 
FROM table123 
GROUP BY Dept_ID; 

はおそらく、他のテーブルには、そう、名前にもたらします:

SELECT b.Dept_Name, AVG(a.Salary) as Avg_Salary 
FROM table123 a JOIN 
    table246 b 
    ON a.Dept_ID = b.Dept_Id 
GROUP BY b.Dept_Name; 
+0

あなたはこの質問のansを与えることができますhttp:// stackoverflow。com/q/42998768/2286537 –

+0

したがって、2つのクエリを組み合わせることはできますか? – CrashBandicoot

+0

2番目のクエリが機能します。しかし、2つのテーブルの同様の情報を結合するために内部結合を使用する必要はありませんか? – CrashBandicoot

1

は何について:

SELECT Dept_Name, alt.Avg_Salary 
FROM table246 b 
INNER JOIN (SELECT Dept_ID, AVG(Salary)Avg_Salary 
      FROM table123 
      GROUP BY Dept_ID)alt ON B.DEPT_ID = ALT.DEPT_ID 
+0

それは私が欲しかったものを与えるが、あなたの答えを修正しなければならなかった。最初の行では、正しい結果を得るにはalt.Avg_Salaryでなければなりません。ありがとう! – CrashBandicoot

+1

はい、修正されました。あなたがそれを見つけたら答えにあなたの好みを与えてください。 – etsa

+0

あなたは何について話していますか? – etsa