- ベストアンサー
人口密度100以下の国で発明事項のある国の国コードを表示する方法
- 副問合せを使用して、人口密度が100以下の国で発明事項のある国の国コードを表示する方法について質問しています。
- 質問文には2つの方法が示されており、方法1ではNATION表を主問合せで使用し、方法2ではINVENTION表を主問合せで使用しています。
- 方法1では結果が80件返ってしまい、正しい結果が表示されていないため、何が問題か質問しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
方法はいくつもあると思いますが.. select CODE from NATION where (POPULATION / AREA) <= 100 and exists(select 1 from INVENTION where NATION_CODE=CODE) とか select CODE from NATION,INVENTION where (POPULATION / AREA) <= 100 and NATION_CODE=CODE が妥当なんじゃないでしょうか。
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
各表の説明がないので、正しいSQLは、どのように書けばよいのか 判りませんが・・ 少なくとも、方法1のSQLは、副問い合わせが、定数100を返すので、 副問い合わせの意味は全くなく、次の単一表による検索と同じ意味です。 SELECT CODE FROM NATION WHERE POPULATION / AREA < 100;
補足
申し訳ございません。 各表の構造はこのようになります。 SQL> DESCRIBE INVENTION 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- INVENTION NOT NULL VARCHAR2(30) INVENTOR VARCHAR2(30) YEAR NUMBER(4) NATION_CODE NUMBER(4) SQL> DESCRIBE NATION 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- CODE NOT NULL NUMBER(5) NATION NOT NULL VARCHAR2(28) CAPITAL VARCHAR2(20) AREA NUMBER(22) POPULATION NUMBER(22) 回答のほどよろしくお願い致します。
お礼
「副問合せ 続(Oracle SQL)」 で的確な結果の出力が返ってきたので、とりあえずOKです。 本当にありがとうございました。