こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

埋め込み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はどんなのがありますでしょうか?

投稿日時 - 2014-09-26 22:12:28

QNo.8769558

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

8人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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で変数を指定して下さい。

投稿日時 - 2014-09-27 02:43:37

ANo.1

DBMSが何かわかりませんが。

「あらかじめviewを作っておいて呼ぶ」は?

投稿日時 - 2014-09-26 22:37:28

補足

回答ありがとうございます。
oracleです。

具体例を教えて頂けると幸いです。

投稿日時 - 2014-09-26 23:09:59

あなたにオススメの質問