- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:副問合せ 続(Oracle SQL))
副問合せ 続(Oracle SQL)
このQ&Aのポイント
- NATION表とINVENTION表から人口密度が100以下で、発明事項がある国の国コードを取得する方法についての質問です。
- 方法1では予想外の結果が返ってしまい、どこが間違っているのかがわからないため、答えを教えて欲しいという相談です。
- 方法2では正しく5件の結果が取得できていますが、なぜ方法1がうまくいかないのかが気になっています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なんとしても、メンバーシップ検査を使うなら.. SELECT CODE FROM NATION WHERE (POPULATION / AREA) <= 100 AND CODE IN (SELECT NATION_CODE FROM INVENTION) な感じで書く。
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
回答No.2
前回も書きましたが・・・ SELECT CODE FROM NATION WHERE (POPULATION / AREA) <=ANY(SELECT 100 FROM INVENTION); と書くのは、 SELECT CODE FROM NATION WHERE POPULATION / AREA < 100; に等しく、実質的にINVENTION表に関係のない問い合わせをしている。 あなたの書いた説明に当てはめると、「人口密度(人口/面積)が100以下の国」を 問い合わせしていることになり、当然、「発明事項がある国」を抽出しないので 正しい問い合わせになる訳がない。 ということなのでは?
質問者
お礼
回答ありがとうございました。 おかげでよく分かりました。
補足
回答ありがとうございます。 SELECT CODE FROM NATION WHERE (POPULATION / AREA) <=ANY(SELECT 100 FROM INVENTION) の記述でなぜ正しい結果が返ってこないかが分かりません。 回答のほどよろしくお願いいたします。