• 締切済み

副問合せについて

NATION表とINVENTION表より人口密度(人口/面積)が100以下の国で、発明事項がある国の国コードを表示する。 方法1:主問合せでNATION表を利用する 14件 1 SELECT DISTINCT NATION_CODE FROM INVENTION 2* WHERE 100 >= ANY(SELECT POPULATION / AREA FROM NATION) 方法2:主問合せでINVENTION表を利用する 80件 SELECT CODE FROM NATION WHERE (POPULATION / AREA) <=ANY(SELECT 100 FROM INVENTION) 出力件数が方法1と2で異なるわけですが同じことをしているので(つもり)件数が違う理由が今ひとつわかりません。 よろしくお願いいたします。 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)

みんなの回答

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.2

INVENTION を主にする場合、同じ国が複数出ていると思うので、国コードでグループ化するといいはず…きっと

yukikundesuyo
質問者

補足

回答ありがとうございます。 下記、SQL命令文でうまくいきました。 あと、方法1:主問合せでNATION表を利用する 方がうまくいきません。 私の考えた下記SQL文では実行結果が80件返ってしまいます。 答えは方法2と同じ5件ですがどこが悪いのでしょうか? 方法1失敗! SELECT CODE FROM NATION WHERE (POPULATION / AREA) <=ANY(SELECT 100 FROM INVENTION) 方法2実行結果成功! SELECT DISTINCT NATION_CODE FROM INVENTION WHERE NATION_CODE = ANY(SELECT CODE FROM NATION WHERE 100 >= POPULATION / AREA) NATION_CODE ----------- 107 136 142 154 157

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

元になるテーブルにあるレコード数が違うから 1国=1発明ではないのでしょう?

yukikundesuyo
質問者

補足

回答ありがとうございます。 ということは主問合せの表を変えると件数が絶対に変わってしまうのでしょうか? 出力件数を同じにする文法があれば教えてほしいのですが。

関連するQ&A