プロが教えるわが家の防犯対策術!

お世話になります、
二つの表の項目を比較して値を取得するSQLを作成しているのですが、うまくいきません。

具体的には
Aテーブル

NAME | PRICE
------|------
リンゴ | 100
------|------
オレンジ | 200
------|------
ブドウ | 300
------|------


Bテーブル

NAME | PRICE
------|------
リンゴ | 1000
------|------
オレンジ | 200
------|------
ブドウ | 1300
------|------


という二つのテーブルA、Bがあったとします。
このA,Bの二つのテーブルのそれぞれの果物のPRAICEを比較してBのPRICEがアップしている果物を出力するという
SQLを教えてください。

<ほしい結果>
NAME | PRICE
------|------
リンゴ | 1000
------|------
ブドウ | 1300


よろしくお願いします。

A 回答 (5件)

No.1の ymmasayan です。


hana432 さんの指摘は重要です。

> AテーブルのNAMEとBテーブルのNAMEは、1:1と考えてよいですか?

この条件が満たされない場合は副照会を使う必要が出てくるでしょう。
ただ、そのあとに多少疑問があります。

> もし、「Aテーブルには無くてBテーブルにはある」もしくはその逆のパターンのデータが存在するのであれば上記の条件では不備があるので注意してください。

このような不備はありません。一方がなくても比較をしないだけ(本当は比較にすら行かない)なので、心配する必要はありません。

この回答への補足

こんにちは、ご指摘ありがとうございます。

指摘のとおり、AテーブルのNAMEとBテーブルのNAMEは、1:1と考えてけっこうです。

Aテーブルに有るものはBテーブルには必ず存在すると考えてください。

以上よろしくお願いします。

補足日時:2001/11/28 00:19
    • good
    • 0

No.3に頂いた補足の通りなら No.1のSQL文で通るはずです。


No.1、No.2、No.4(前半)の3つの回答が一致しています。
    • good
    • 0

Aに無くてBのみがある場合にも、対象として抽出したりする時には、下記のようなSQLも面白いかもね。



select b.name, b.price from a,b
where a.name = b.name
and b.price > a.price
union
select b.name, b.price from b
where b.name not in
(select a.name from a);
 
蛇足SQLでした。
    • good
    • 0

AテーブルのNAMEとBテーブルのNAMEは、1:1と考えてよいですか?それなら、NAMEをリレーションとする条件をWHERE句に書いて、AとBの比較をするだけでいいかなーと思います。



select
B.NAME,
B.PRICE
from
Aテーブル A,
Bテーブル B
where
A.NAME = B.NAME -- AとBで一致するNAMEのものを取得
and A.PRICE < B.PRICE -- 一致する中で、Bの値段が高いものを取得
;

もし、「Aテーブルには無くてBテーブルにはある」もしくはその逆のパターンのデータが存在するのであれば上記の条件では不備があるので注意してください。
その時はまた補足してください。もしかしたらお役に立てるかも。
    • good
    • 0

select B.NAME,B.PRICE FROM A,B 


where A.NAME=B.NAME AND B.PRICE>A.PRICE

でよいと思うのですが。
よくやる間違いは A.NAME=B.NAME 部分の定義忘れです。  
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す