重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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文についてどこに問題があるのか、ご教授お願い致します。

A 回答 (3件)

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



>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);
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2006/09/11 22:03

>WHERE URIAGE.HINMOKU_CODE = HINMOKU.HINMOKU_CODE



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

>SELECT HINMOKU_CODE FROM URIAGE


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

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

この回答への補足

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す