• 締切済み

埋め込みSQLについて

現在C言語で開発を行っている初級のIT技術者です。 pro*cでは、inner joinやexistsを使うとコンパイルエラーとなってしまいます。 泣く泣く、inを使ってしまいました。例えば以下テーブルがあります。 請求テーブル 識別ID 更新日付 201405 20140922 100177 20140204 258087 20140412 201497 20140711 258055 20140812 履歴テーブル 加入者ID 識別ID(主キー) 2014   201405 5800   587405 2014   258087  8507   874575 以下をパッケージに記載しています。 EXEC SQL SELECT 色々 FROM 請求テーブル WHERE 識別ID IN (SELECT 識別ID FROM 請求テーブル WHERE 加入者ID = 変数) ORDER BY 更新日付 ASC 例えば、変数として2014が来た場合は、履歴テーブルより 2014   201405 2014   258087 が選択されて、請求テーブルの更新日付を見て古い方を取ってくるので 結局258087 20140412が取得されます。この代わりとなる、pro*cで記述できる SQLはどんなのがありますでしょうか?

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

見直したら、そもそもの条件がおかしいような気がします。 請求テーブルには[加入者ID]があるようには見えない。 > が選択されて、請求テーブルの更新日付を見て古い方を取ってくるので > 結局258087 20140412が取得されます。 201405 20140922が欲しいの? 最初の1レコードを取得するロジック? なら、現行のコードのまま、 > ORDER BY 更新日付 ASC を ORDER BY 更新日付 DESC にする。 直積使ってテーブル結合したらどうなるのかな? SELECT 色々 --列名をt1、 t2で修飾してね FROM 請求テーブル t1, 請求テーブル t2 WHERE t1.識別ID = t2.識別ID AND t2. 加入者ID = 変数 ORDER BY t2.更新日付 DESC ; CREATE VIEW はググって下さい。 VIEWにするときはWHERE条件の AND t2. 加入者ID = 変数 は不要。VIEWに対してWHEREで変数を指定して下さい。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

DBMSが何かわかりませんが。 「あらかじめviewを作っておいて呼ぶ」は?

system0002
質問者

補足

回答ありがとうございます。 oracleです。 具体例を教えて頂けると幸いです。

関連するQ&A