• ベストアンサー

2つのテーブルを結合して最大値を取得したい

2つのテーブルを結合(INNER JOIN)して、ある列の最大値を取得する方法を教えてください。 例えば、 出荷ファイルと出荷明細ファイルの2テーブルで、出荷日の列をキーとして結合します。 この2テーブルで出荷番号という列の最大値を取得したいのです。 具体例では、 出荷日が2テーブルとも8/6があるとして、 出荷ファイル.出荷番号 の最大値が”5”で、 出荷明細ファイル.出荷番号の最大値が”6”の場合、 結果として、”6”を取得できれば良いのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cieux
  • ベストアンサー率22% (100/443)
回答No.2

こんなやり方ではどうでしょうか? SELECT MAX(出荷番号) FROM (SELECT 出荷番号, 出荷日 FROM 出荷 WHERE 出荷日=8/4) AS A INNER JOIN (SELECT 出荷番号, 出荷日 FROM 出荷明細 WHERE 出荷日=8/4) AS B ON A.出荷日=B.出荷日 SQLは、手許に実行環境がないので、不正確です。ニュアンスだけ感じ取ってください^^; どのDBだとどのSQLが通ったのか、あんまりよく覚えていないので…。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

No1さんの回答の2番煎じです。 <出荷ファイル> ID__出荷日_________出荷番号 1___2007/08/06__5 2___2007/08/06__7 <出荷明細> ID__出荷日_________出荷番号__品名 1___2007/08/06__5_____________A 2___2007/08/06__6_____________B UNION 演算子を使用すると、2 つ以上の SELECT ステートメントの結果を結合して単一の結果セットにできます。 (Books Online) ですから、<最大値なら単一の結果セット>と考えるでしょう。 select 出荷番号 from 出荷ファイル where 出荷日='2007/08/06' union select 出荷番号 from 出荷明細 where 出荷日='2007/08/06' このSQL文の実行結果は次のようです。 ____|出荷番号| ____|____________| ___1|__________5| ___2|__________6| ___3|__________7| こうなれば、出荷番号=7 を選択するのみ。 select max(出荷番号) As 出荷番号最大値 FROM (select 出荷番号 from 出荷ファイル where 出荷日='2007/08/06' union select 出荷番号 from 出荷明細 where 出荷日='2007/08/06') as ShipNumbers ____|出荷番号最大値| ____|_____________________| ___1|___________________7| 「No1さんの回答の2番煎じ」という理由です。 PS:[素直に考えればunionを使いたくなります]とは、どういう意味なのか? SELECT * FROM 出荷ファイル AS A INNER JOIN 出荷明細 AS B ON A.出荷日=B.出荷日 ____|ID|出荷日_______|出荷番号|ID|出荷日_______|出荷番号|品名| ____|--------------------------------------------------------- ___1|_1|2007/08/06|__________5|_1|2007/08/06|___________5|A___| ___2|_2|2007/08/06|__________7|_1|2007/08/06|___________5|A___| ___3|_1|2007/08/06|__________5|_2|2007/08/06|___________6|B___| ___4|_2|2007/08/06|__________7|_2|2007/08/06|___________6|B___| なるほど、単一の結果セットにならないので最大値を求めるには適しないということなんでしょうね。 ※恥ずかしながら、本日、生まれて初めて union なんて使ってみました。 ※まあ、便利なものがあったんですね。

回答No.1

SQL Serverは、2000ですか?2005ですか?それとも、別のバージョンですか? 出荷ファイルと出荷明細ファイルは、1:1ですか? 同一出荷日の行は、1行なのですか?それとも、複数行ですか? 出荷ファイル.出荷番号と出荷明細ファイル.出荷明細ファイル.出荷番号という異なる列について、最大値を得るなら、素直に考えればunionを使いたくなります。 select max(出荷番号) from (select 出荷番号 from 出荷ファイル where <出荷日が8/6を得る条件> union (select 出荷番号 from 出荷明細ファイル where <出荷日が8/6を得る条件>) as x inner joinで、何か得たい情報があるのですか?

kuriosprj
質問者

補足

SQL Serverは2005です。 また、出荷ファイルと出荷明細ファイルはn:nです。 INNER Joinで得たい情報はないです。出荷番号の最大値だけ得たいのです。 追加ですが、MAX(出荷番号)とありますが、これは、出荷ファイル.出荷番号とか出荷明細ファイル.出荷番号とか指定しなくていいのですか?

関連するQ&A