- PR -

SELECT文の条件文について質問です

投稿者投稿内容
YASUYOKA
ベテラン
会議室デビュー日: 2007/03/19
投稿数: 71
投稿日時: 2007-05-15 15:52
引用:

satokoさんの書き込み (2007-05-15 15:45) より:
KOXさんの言うとおり、Bテーブルの他の項目をMAX(CARE_SEQ)の条件で取得したかったです。



SELECT * FROM Bテーブル C
WHERE
  C.CARE_SEQ = SELECT MAX(B.CARE_SEQ) FROM Aテーブル A,Bテーブル B
         WHERE
         A.TARGET_DT BETWEEN B.CARE_VAL_FR_DT AND B.CARE_VAL_TO_DT

ではいけませんか?
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2007-05-15 16:17
http://www.atmarkit.co.jp/fnetwork/rensai/sql01/sql1.html

この連載を一通り読んだ方が良いと思いますよ 
satoko
常連さん
会議室デビュー日: 2006/05/06
投稿数: 35
お住まい・勤務地: 東京
投稿日時: 2007-05-15 21:47
引用:

SELECT * FROM Bテーブル C
WHERE
  C.CARE_SEQ = SELECT MAX(B.CARE_SEQ) FROM Aテーブル A,Bテーブル B
         WHERE
         A.TARGET_DT BETWEEN B.CARE_VAL_FR_DT AND B.CARE_VAL_TO_DT

ではいけませんか?



YASUYOKAさん返信ありがとうございます〜

C.CARE_SEQ = SELECT MAX(B.CARE_SEQ) FROM T_TEST1 A,T_TEST2 B
*
行3でエラーが発生しました。:
ORA-00936: 式がありません。

と言われてしまいました。

引用:

この連載を一通り読んだ方が良いと思いますよ



NAOさん参考URLありがとうございます。
時間を作って読んでみます。
saki1208
ベテラン
会議室デビュー日: 2006/08/22
投稿数: 86
投稿日時: 2007-05-15 21:58
saki1208です。

引用:

C.CARE_SEQ = SELECT MAX(B.CARE_SEQ) FROM T_TEST1 A,T_TEST2 B
*
行3でエラーが発生しました。:
ORA-00936: 式がありません。



C.CARE_SEQ = (SELECT MAX(B.CARE_SEQ) FROM T_TEST1 A,T_TEST2 B)

()でくくる必要があるのではないでしょうか。

#レスをヒントにマニュアルぐらいは見ましょう。


[ メッセージ編集済み 編集者: saki1208 編集日時 2007-05-15 21:59 ]

[ メッセージ編集済み 編集者: saki1208 編集日時 2007-05-15 22:00 ]
ノラ
常連さん
会議室デビュー日: 2003/11/06
投稿数: 37
お住まい・勤務地: 東京都
投稿日時: 2007-05-17 18:03
気になったのですが、Aテーブルのレコードは常に1行なんでしょうか?
satoko
常連さん
会議室デビュー日: 2006/05/06
投稿数: 35
お住まい・勤務地: 東京
投稿日時: 2007-05-18 10:29
引用:

C.CARE_SEQ = (SELECT MAX(B.CARE_SEQ) FROM T_TEST1 A,T_TEST2 B)
()でくくる必要があるのではないでしょうか。
#レスをヒントにマニュアルぐらいは見ましょう。



saki1208さんレスありがとうございます。
()で括ってもエラーが出たので分からなくなってしまいました。。。

引用:

気になったのですが、Aテーブルのレコードは常に1行なんでしょうか?



ノラさんレスありがとうございます。
自分で考えてみた結果、以下のようになりました。

(SELECT A.TARGET_DT,MAX(B.CARE_SEQ) AS MAX_SEQ
FROM T_TEST1 A ,T_TEST2 B
WHERE A.TARGET_DT BETWEEN B.CARE_VAL_FR_DT AND B.CARE_VAL_TO_DT
GROUP BY AA.TARGET_DT) AA
サブクエリでMAXのCARE_SEQを取得し、
WHEREの後で、
AA.MAX_SEQ = T_TEST2.CARE_SEQ
T_TEST2から直接取得するようにして、動きました。

これから、NAOさんがしてくれたのレスのHPを全部読んできます。

皆さんありがとうございました。
未記入
会議室デビュー日: 2007/05/29
投稿数: 2
投稿日時: 2007-05-30 19:07
Select Max(CARE_SEQ) From
( SELECT B.CARE_SEQ
FROM T_TEST1 A ,T_TEST2 B
WHERE A.TARGET_DT BETWEEN B.CARE_VAL_FR_DT AND B.CARE_VAL_TO_DT ) AS table1

スキルアップ/キャリアアップ(JOB@IT)