• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:副問合せ 続(Oracle SQL))

副問合せ 続(Oracle SQL)

このQ&Aのポイント
  • NATION表とINVENTION表から人口密度が100以下で、発明事項がある国の国コードを取得する方法についての質問です。
  • 方法1では予想外の結果が返ってしまい、どこが間違っているのかがわからないため、答えを教えて欲しいという相談です。
  • 方法2では正しく5件の結果が取得できていますが、なぜ方法1がうまくいかないのかが気になっています。

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

  • ベストアンサー
回答No.1

なんとしても、メンバーシップ検査を使うなら.. SELECT CODE FROM NATION WHERE (POPULATION / AREA) <= 100 AND CODE IN (SELECT NATION_CODE FROM INVENTION) な感じで書く。

yukikundesuyo
質問者

補足

回答ありがとうございます。 SELECT CODE FROM NATION WHERE (POPULATION / AREA) <=ANY(SELECT 100 FROM INVENTION) の記述でなぜ正しい結果が返ってこないかが分かりません。 回答のほどよろしくお願いいたします。

その他の回答 (1)

回答No.2

前回も書きましたが・・・ SELECT CODE FROM NATION WHERE (POPULATION / AREA) <=ANY(SELECT 100 FROM INVENTION); と書くのは、 SELECT CODE FROM NATION WHERE POPULATION / AREA < 100; に等しく、実質的にINVENTION表に関係のない問い合わせをしている。 あなたの書いた説明に当てはめると、「人口密度(人口/面積)が100以下の国」を 問い合わせしていることになり、当然、「発明事項がある国」を抽出しないので 正しい問い合わせになる訳がない。 ということなのでは?

yukikundesuyo
質問者

お礼

回答ありがとうございました。 おかげでよく分かりました。

関連するQ&A