こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL文 教えて下さい。

以下のようなデータがあります。

・列Aにはが1~300までの値が格納。
・列BにはA~Zまでの値が格納。

列B、A~Zの値に対して、
列Aの値は列1~300の値を複数持つことができます。

列A 列B
-----------
1 A
2 A
3 A
6 A
1 B
3 B
 :

このとき、列Aの値のうち、1~10までの値を全て持つ列Bの値を抜き出すにはどういったSQL文を記述すればよいでしょうか。

よろしくお願いします。

投稿日時 - 2006-05-19 17:12:27

QNo.2161414

暇なときに回答ください

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

#6ですが、間違っているので、訂正。

select B from TBL where A between 1 and 10 group by B having count(distinct A) = 10;

が正しい。

投稿日時 - 2006-05-20 13:04:32

お礼

ありがとうございます。
教えていただいたSQLでできました。

投稿日時 - 2006-05-22 13:09:23

このQ&Aは役に立ちましたか?

7人が「このQ&Aが役に立った」と投票しています

回答(7)

もっとも短い書き方は、

select B from TBL where A between 1 and 10 group by B having count(distinct B) = 10;

ですかね。(これ以上簡素な書き方はないハズ)

投稿日時 - 2006-05-20 03:30:35

ANo.5

No.3の改良です。ただ、このSQLがあらゆるソフトで正しいSQLとして
解釈されるかどうかはわかりません。

SELECT B
FROM (SELECT DISTINCT * FROM T)
WHERE A between 1 and 10
GROUP BY B
HAVING COUNT(B)=10;

投稿日時 - 2006-05-20 01:19:59

ANo.4

select 列B
from テーブル
where 列A between 1 and 10

という話ではなくて、でしょうか?

この質問分だけでは今ひとつやりたい事がはっきりしないので、詳しく説明していただきたく(上記のSQLだと、どのように「やりたい事」の通りにならないのか)存じます。

投稿日時 - 2006-05-19 17:34:14

ANo.3

select 列B from テーブル
where 列A between 1 and 10
group by 列B
having count(列B) = 10

列A、列Bだけで主キーに出来ないといけませんが・・・。
上記は下のパターンがある場合は上手くいきません・・・。
列A 列B
-----------
1 A
2 A
1 A
6 A
1 B
2 A
といった感じで 列A、列Bがカブル場合

投稿日時 - 2006-05-19 17:18:48

ANo.2

select 列B from テーブル名
where 列A between 1 and 10;

でどうでしょ?

投稿日時 - 2006-05-19 17:18:14

ANo.1

select B from XX where (A >= 1 AND A <= 10)
でだめ?

投稿日時 - 2006-05-19 17:17:44

あなたにオススメの質問