- - PR -
SQLの質問ですが。。。
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-12-18 19:49
いつもお世話になります。
SQLを作成していて、教えて頂きたいことがあります。 お忙しいところ、よろしくお願いします。 (Oracle9) ■サービステーブル(Service) --------------------------------------------------- BeCode | TorihikiCodo | ServiceCode | ServiceMei | --------------------------------------------------- b01 | t01 | s01 | smei01 | b01 | t02 | s02 | smei02 | b01 | t03 | s03 | smei03 | b09 | t09 | s09 | smei09 | --------------------------------------------------- ※BeCode、TorihikiCodo、ServiceCodeはキー ■利用者テーブル(Ryousha) ---------------------------------------------------- RyoushaCode | Becode | TorihikiCodo | ServiceCode | ---------------------------------------------------- r01 | b01 | t01 | s01 | r03 | b01 | t03 | s03 | ---------------------------------------------------- ※RyoushaCodeキー ■取引テーブル(Torihiki) ----------------------------- TorihikiCodo | TorihikiMei | ----------------------------- t01 | tmei01 | t02 | tmei02 | t03 | tmei03 | t04 | tmei04 | t05 | tmei05 | ----------------------------- ※TorihikiCodoはキー ■欲しい結果 ------------------------------------------------------------ R_RyoushaS | R_ToriSer | R_ToriMei | R_SerMei | R_Ryousha | ------------------------------------------------------------ | t01s01 | tmei01 | smei01 | r01 | 未 | t02s02 | tmei02 | smei02 | | | t03s03 | tmei03 | smei03 | r03 | ------------------------------------------------------------ ■作成SQL SELECT -- R_RyoushaS: as R_RyoushaS, Service.TorihikiCodo || Service.ServiceCode as R_ToriSer, Torihiki.TorihikiMei as R_ToriMei, Service.ServiceMei as R_SerMei, -- R_Ryousha: as R_Ryousha FROM Service, Ryousha, Torihiki WHERE Service.BeCode = 'b01' AND Service.TorihikiCodo = Torihiki.TorihikiCodo AND ■教えて頂きたいこと R_RyoushaSは、ServiceテーブルのTorihikiCodoとServiceCodeの 両方をキーとしてRyoushaテーブルのTorihikiCodoとServiceCodeの 両方と一致するレコードがあれば、何の表示せず、 一致するレコードがなければ'未'を表示したいのです。 R_Ryoushaには未の代わりにRyoushaCodeを表示したいのです。 | ||||
|
投稿日時: 2004-12-18 20:16
手元に Oracle がないので適当に書いていますが、
| ||||
|
投稿日時: 2004-12-19 00:06
実際に動かしてみたわけではないので、間違っているところがあるかもしれませんが、
こんな感じでどうでしょうか。 UNION ALL の前が TorihikiCode と ServiceCode が存在するとき、後が存在しないときです。 SELECT NULL, Ryousha.TorihikiCodo||Ryousha.ServiceCode AS R_ToriSer, (SELECT TorihikiMei FROM Torihiki WHERE Torihiki.TorihikiCode = Riyousha.TorihikiCode ) AS R_ToriMei, Service.ServiceMei AS R_SerMei, R_Ryousha AS R_Ryousha FROM Service, Riyousha UNION ALL SELECT '未', Ryousha.TorihikiCodo||Ryousha.ServiceCode AS R_ToriSer, (SELECT TorihikiMei FROM Torihiki WHERE Torihiki.TorihikiCode = Riyousha.TorihikiCode ) AS R_ToriMei, Service.ServiceMei AS R_SerMei, R_Ryousha AS R_Ryousha FROM Riyousha WHERE NOT EXISTS ( SELECT * FROM Service WHERE Service.TorihikiCode = Riyousha.TorihikiCode AND Service.Service = Riyousha.Service ); | ||||
1
