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

解決済みの質問

EXSIST述語を使った副問合わせについて

SELECT HINMOKU_NAME FROM HINMOKU WHERE HINMOKU_CODE IN
(SELECT HINMOKU_CODE FROM URIAGE WHERE URIAGE_DATE =
'2004-11-10');

上記をSQL文をEXISTS述語を使って書き換えると
エラーが出てしまい、うまく書き換えがすることが
できません。下記にエラーがでるSQL文を記載いたします。

SELECT HINMOKU_NAME FROM HINMOKU WHERE EXISTS (SELECT HINMOKU_CODE FROM URIAGE
WHERE URIAGE_DATE ='2004-11-10'
WHERE HINMOKU.HINMOKU_CODE=URIAGE.HINMOKU_CODE);

上記SQL文についてどこに問題があるのか、ご教授お願い致します。

投稿日時 - 2006-09-10 22:18:27

QNo.2397854

KGM

暇なときに回答ください

質問者が選んだベストアンサー

単に「エラーが出る」ではなくて、どんなエラーか内容を書きましょう。

>WHERE句を減らしてHAVING句にしましたが、
>エラー表示されてしまいます。

そんなデタラメなことをやってはいけません。(笑)

HAVINGは、GROUP BYと共に使用するものです。

表名、列名の指定は正しいとして、表の関連付けのための条件とその他の条件をANDで結んでください。

EXISTS内のSELECTの列名は、今回のSQLの場合は意味がないので、一般的には「*」を指定します。
(慣習的に「1」を指定する人もいる)

【修正例】
SELECT HINMOKU_NAME
FROM HINMOKU
WHERE EXISTS
(SELECT * FROM URIAGE
WHERE URIAGE_DATE ='2004-11-10'
AND MOKU.HINMOKU_CODE=URIAGE.HINMOKU_CODE);

投稿日時 - 2006-09-11 07:14:13

お礼

HAVING句はGROUP句で使用するものでしたね。。。
大変失礼しました・・・・

なるほどと思わされる内容でした。
非常に助かりました。

これからは、エラー内容の表示についても注意します。

投稿日時 - 2006-09-11 22:03:04

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

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

回答(3)

ANo.2

>WHERE URIAGE.HINMOKU_CODE = HINMOKU.HINMOKU_CODE

後は、スキーマーやテーブルかViewか判らないんですが、固定項目じゃない所を'='では結べないのでは?

投稿日時 - 2006-09-11 06:06:44

ANo.1

>SELECT HINMOKU_CODE FROM URIAGE
WHERE URIAGE_DATE ='2004-11-10'
WHERE HINMOKU.HINMOKU_CODE=URIAGE.HINMOKU_CODE

に、WHERE句が2つ有るのが問題な気が・・・。

投稿日時 - 2006-09-10 22:24:38

補足

SELECT HINMOKU_CODE FROM HINMOKU WHERE EXISTS (SELECT HINMOKU_CODE
FROM URIAGE WHERE URIAGE.HINMOKU_CODE = HINMOKU.HINMOKU_CODE
HAVING URIAFW_DATE = '2004-11-10');

WHERE句を減らしてHAVING句にしましたが、
エラー表示されてしまいます。

投稿日時 - 2006-09-10 23:19:30

あなたにオススメの質問