OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

二つの表の項目を比較して値を取得するSQL

  • 困ってます
  • 質問No.175784
  • 閲覧数1402
  • ありがとう数1
  • 気になる数0
  • 回答数5
  • コメント数0

お世話になります、
二つの表の項目を比較して値を取得する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


よろしくお願いします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル14

ベストアンサー率 30% (2593/8599)

No.1の ymmasayan です。
hana432 さんの指摘は重要です。

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

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

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

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

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

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

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

以上よろしくお願いします。
投稿日時 - 2001-11-28 00:19:46
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル14

ベストアンサー率 30% (2593/8599)

select B.NAME,B.PRICE FROM A,B  where A.NAME=B.NAME AND B.PRICE>A.PRICE でよいと思うのですが。 よくやる間違いは A.NAME=B.NAME 部分の定義忘れです。  
select B.NAME,B.PRICE FROM A,B 
where A.NAME=B.NAME AND B.PRICE>A.PRICE

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


  • 回答No.2
レベル7

ベストアンサー率 37% (6/16)

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で一致する ...続きを読む
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テーブルにはある」もしくはその逆のパターンのデータが存在するのであれば上記の条件では不備があるので注意してください。
その時はまた補足してください。もしかしたらお役に立てるかも。
  • 回答No.4
レベル9

ベストアンサー率 32% (34/105)

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 (selec ...続きを読む
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でした。
  • 回答No.5
レベル14

ベストアンサー率 30% (2593/8599)

No.3に頂いた補足の通りなら No.1のSQL文で通るはずです。 No.1、No.2、No.4(前半)の3つの回答が一致しています。
No.3に頂いた補足の通りなら No.1のSQL文で通るはずです。
No.1、No.2、No.4(前半)の3つの回答が一致しています。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ