- PR -

SQLの書き方について教えてください

1
投稿者投稿内容
tarot
会議室デビュー日: 2007/12/03
投稿数: 2
投稿日時: 2007-12-03 00:25
以下のテーブルを結合するクエリの書き方をご教授頂けないでしょうか。
SQL2005(Express)をASP.NETで使用しております。

単価テーブル
ID S_Lang T_Lang UnitPrice
1 1 2 20
2 2 1 17
3 3 2 25

言語テーブル
ID Lang
1 EN
2 JA
3 DE

同じ「言語テーブル」を2回見に行くため、

SELECT
単価テーブル.ID AS ID
言語テーブル.Lang AS S_Lang
言語テーブル.Lang AS T_Lang
単価テーブル.UnitPrice AS UnitPrice
FROM
単価テーブル
INNER JOIN
言語テーブル
ON
言語テーブル.Lang=単価テーブル.S_Lang

と書いた所で行き詰ってしまいました。続けて、

INNER JOIN
言語テーブル
ON
言語テーブル.Lang=単価テーブル.T_Lang

と書いてもエラーになってしまいます。。。
初心者なので基本的なことが分かっていないと思うのですが、よろしくお願いいたします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-12-03 02:08
2つの言語テーブルに別名(AS)をつければいいんじゃないですかね
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2007-12-03 04:54
コード:
     SELECT 単価テーブル.ID ID, S1.Lang S_Lang, T1.Lang T_Lang, 単価テーブル.UnitPrice UnitPrice 
       FROM 単価テーブル 
 INNER JOIN 言語テーブル S1 ON 単価テーブル.S_Lang = S1.Lang
 INNER JOIN 言語テーブル T1 ON 単価テーブル.T_Lang = T1.Lang



忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2007-12-03 06:21
引用:

言語テーブル.Lang=単価テーブル.S_Lang

と書いた所で行き詰ってしまいました。続けて、

INNER JOIN 言語テーブル ON 言語テーブル.Lang=単価テーブル.T_Lang



単価テーブルのS_Lang、T_Langは、言語テーブルのLangではなく、IDに対応している
のですよね?

「単価テーブル.S_LANG=言語テーブル.ID」で関連付けて、言語テーブルのLangの値
を得たいのでは?

コード:
select
  T.ID as ID,
  G1.Lang as S_Lang,
  G2.Lang as T_Lang,
  T.UnitPrice as UnitPrice
 from 単価テーブル as T
  inner join 言語テーブル as G1 on T.S_Lang=G1.ID
  inner join 言語テーブル as G2 on T.T_Lang=G2.ID

tarot
会議室デビュー日: 2007/12/03
投稿数: 2
投稿日時: 2007-12-04 20:58
皆様すぐにご回答頂きありがとうございました。
各言語テーブルに AS で別名をつけることで、解決致しました。(忠犬さんのコードでバッチリでした)
最初に記述するSELECT内のテーブル名が仮の名前でも、後から記述するINNER JOIN ASでその名前を定義すれば大丈夫なのですね・・・(SQL界では常識なのだと思いますが)この発想には至りませんでした!
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)