人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mySQLのSELECT文で質問です。

たとえば、以下のテーブルで、
Aカラムが1である行を対象に、すべての行が(B==1 かつ C==1)であるか、そうでないかを調べたいとします。
数は不要です。
CREATE TABLE table ( A int, B int, C int );

いまのところ、以下のように?と?の値が同じかどうかで判断しています。
?SELECT * FROM table WHERE A=1;
?SELECT FOUND_ROWS();
?SELECT * FROM table WHERE B=1 AND C=1;
?SELECT FOUND_ROWS();

質問は、これをなんとか1命令ですっきりと処理したいのですが、ご教授のほどよろしくお願いいたします。

●質問者: cochoo
●カテゴリ:ウェブ制作
✍キーワード:MySQL SELECT カラム 教授
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● wwwww1
●0ポイント

ヱヴァンゲリヲン新劇場版:破 EVANGELION:2.22 YOU CAN (NOT) ADVANCE.【初回限定版】[DVD]

ヱヴァンゲリヲン新劇場版:破 EVANGELION:2.22 YOU CAN (NOT) ADVANCE.【初回限定版】[DVD]

  • 出版社/メーカー: キングレコード
  • 発売日: 2010-05-26
  • メディア: DVD

イルカ賞って何?

◎質問者からの返答

すいません。このようなご回答にはコメントできませんので、あしからずご了承ください。


2 ● p332
●26ポイント

下記SQLで良いと思います。

caseを使い、任意の条件を満たせば1、満たさなければ0、という式を作ります。

その式の合計(sum)をとれば、その行数がわかりますので、全体の行数と一致するかどうか見れば良いです。

SELECT

count(*)

,sum(case when b=1 and c=1 then 1 else 0 end) cnt2

FROM table

WHERE A=1

caseのほかに、ifなどでもできるかと思いますが、caseは標準SQLで汎用的に使えるのでおすすめです。

http://neoinspire.net/archives/108

◎質問者からの返答

なるほど、ありがとうございます。

こういう使い方もあるんですね。

参考にさせていただきます。


3 ● Committeeman
●23ポイント

基本的な方法

SELECT count(*) FROM `table` WHERE A = 1 AND (B <> 1 OR C <> 1);

今回の条件ならば下記のようなものも使えるが速度面では計算不要の上記が早い

こういった方法もあるという程度に覚えておくと将来もしかしたら役に立つかもしれない

SELECT count(*) FROM `table` WHERE A = 1 AND (B * C <> 1);

http://q.hatena.ne.jp/answer

◎質問者からの返答

ありがとうございます。

countで数を同時に数えられるので、参考にさせていただきます。


4 ● fenstrial
●41ポイント ベストアンサー

select count(*)=count(if(B=1 and C=1,1,null)) from `table` where A = 1;

2番のものと考え方は同じですが、mysql内で比較までやっているので1,0で返ります。

case,sumではなくif,countを使って作ってみました。

http://q.hatena.ne.jp/

◎質問者からの返答

なるほど、これいいですね。

こういう方法が一番期待していたものです。

ありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ