SQL文について


木村  2005-08-06 19:36:56  No: 16914  IP: 192.*.*.*

SQLの文法についての質問なので、この板では不適切かもしれませんが、
Delphi6 ent + InterBaseの環境ということでご容赦頂ければ幸いです。


以下の4テーブルがあります。

-------------------------------------------------

<顧客テーブル>
顧客ID
顧客名

<商品テーブル>
商品ID
商品名

<売上データ>
売上ID(auto inc)
売上日
顧客ID

<売上明細データ>
売上明細ID(auto inc)
売上ID
商品ID
数量

-------------------------------------------------

各テーブルのリレーションは同じ名前のカラム同士になります。

たとえば

select 顧客.* from 顧客
inner join 売上 on 顧客.顧客ID = 売上.顧客ID
inner join 売上明細 on 売上明細.売上明細ID = 売上.売上明細ID
where 売上明細.商品ID = *指定した商品ID*

同じ顧客が指定商品を複数回購入していたとすると、
上記SQLで得られる結果は、同じ顧客が購入した回数分抽出されてしまいます。
これを重ならないようには出来ないでしょうか?

つまり1人の顧客が何度商品を購入しようとも、
同じ顧客が何度も表示されないようにしたいのです。
そのためのSQL文が分からずに困っております。
智恵をお貸し下されば幸いです。

編集 削除
関係ないね  2005-08-06 21:10:41  No: 16915  IP: 192.*.*.*

こんな書きかただったら世の中のこと全部ここに質問できるんじゃないですか?
「Delphi を買ったんだけどそのことで奥さんとケンカしたのですがどうしたらいいのでしょうか?」ってね

編集 削除
まあまあ  2005-08-07 06:18:21  No: 16916  IP: 192.*.*.*

select distinctを使えばよいと思いますよ。

編集 削除
きりり  2005-08-07 14:11:18  No: 16917  IP: 192.*.*.*

>> 関係ないね 

そこまで言うこと無くないですか?
ご本人も直接関係ないことを丁寧に断った上で書いてますし。
DelphiのメリットのひとつにDBとの親和性があるわけで、全く関係ないとは言い切れないのでは?
少なくても奥さんとのケンカよりはマシかと(笑

編集 削除
ごめんなさい  2005-08-07 15:20:20  No: 16918  IP: 192.*.*.*

↑ちょっといいすぎたかも

編集 削除
シモ  2005-08-09 19:17:39  No: 16919  IP: 192.*.*.*

Group byじゃないのかな?

編集 削除
HOta  2005-08-10 08:27:45  No: 16920  IP: 192.*.*.*

DistinctにGroup Byは要りません。

編集 削除
シモ  2005-08-10 18:36:58  No: 16921  IP: 192.*.*.*

Disinct・・・重複行を省くより、Group byでグループ化した方が
全データを対象に目的の物を取り出すって意味で正当な方法かなぁと
思ったまでです。

編集 削除
HOta  2005-08-11 07:11:11  No: 16922  IP: 192.*.*.*

Group byは集合関数の場合に使用するもので、RDBMAによってはエラーになります。

編集 削除