SELECT * FROM ((SELECT * FROM TABLE1 WHERE 地区='日本') AS NIHON INNER Join (SELECT * FROM TABLE1 WHERE 地区='アメリカ') AS AMERICA ON (NIHON.CODE = AMERICA.CODE) AND (NIHON.PRICE = AMERICA.PRICE) ) INNER JOIN (SELECT * FROM TABLE1 WHERE 地区='フランス') AS FRANCE ON NIHON.CODE = FRANCE.CODE AND NIHON.PRICE = FRANCE.PRICE


TABLE1にはCODE,PRICE,地区といったフィールドがあります。

上記のSQLがあります。まず地区に日本、アメリカ、フランスが出てきます。この3地域以外出てくることはありません。この3地域全てのCODE、PRICEが同じであればデータを抽出してくるといったSQLにしたいです。

※各CODE,PRICEには必ず地区が設定されています。例えばCODE:001の地区が日本、アメリカしかなかったとします。001のフランスがなかった場合は抽出しません。

回答の条件
  • 1人2回まで
  • 登録:2009/08/11 06:13:32
  • 終了:2009/08/18 06:15:02

回答(2件)

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012009/08/11 07:29:39

ポイント60pt

可能性の1つとしては、

CODE あるいは PRICE のデータ型が文字型になっていることが考えられます。


Excelは「数値に直せるデータは自動的に数値として認識」します。

Accessは「テキスト型はテキスト型のまま認識」します。

この違いによって、データの先頭もしくは末尾に空白文字が含まれていた場合、

それぞれ違った挙動を示すようになるからなのですが、まずは、

先頭もしくは末尾に空白が混じっているデータを探してみてください。

SELECT * FROM TABLE1
WHERE (CODE LIKE " *") OR (CODE LIKE "* ") OR (PRICE LIKE " *") OR (PRICE LIKE "* ")

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 ふるるP 192 160 21 2009-08-11 17:12:24
  • id:akaired
    select * from TABLE1 where 地区='日本'でデータをひっぱると2000件あります。同じようにアメリカ、フランスを地区でひっぱってくると1500件、1520件と表示されます。本来なら1520件データをひっぱってこれるところを(Excelで確認)、1490件といったデータをひっぱってきます。つまり、30件データがたりないのです。上のSQLが間違っているような気がするのですが、どこかに間違いがあるでしょうか?

    ちなみに前にこのような質問をしています。
    http://q.hatena.ne.jp/1248847842
  • id:taknt
    SQLの間違いではなく、データが 正しく入っていない可能性が高いということなんですかね。
  • id:Mook
    コメントの状況は、クエリの問題というよりデータの問題という気がするのですが、
    データを今一度確認してみてどうでしょうか。

    最小のフランスと同じ条件をアメリカと日本がすべて持っていたとしても、表示は1500
    でしょうから不足データは 10 件だと思いますが、それは他の地区に同じデータが無い
    か、同じデータが重複していませんか?
  • id:degucho
    INNER JOINなので一番少ないところに合う(この場合1500?)と思うのですが
    地区,CODE,PRICEでユニークではないのかな。
    あとは単純にCODEとPRICEが一致しないだけとか。
    日本とアメリカ、アメリカとフランス、日本とフランスで個別にやったら
    想定どうりになるのでしょうか

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません