- ベストアンサー
MySQLのクエリの質問です
テーブルAにフィールドBとフィールドCがあります。 phpmyadminを使って、フィールドBの値が一致するが、フィールドCの値が不一致のレコードを検索したいと思っています。 このような場合はどのようなクエリを書けばよろしいでしょうか? よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
そういうことだと、こんな感じでしょうかねぇ・・・ select * from tableA where B IN ( select B from tableA group by B having count(*)>1 and count(DISTINCT C)>1 ) つまり、Bが2個以上あって、Bに対するCが2個以上あるという条件です
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>Bの値が一致 Bがひとつのものはどうするかによりますがざっとこんな感じで //準備 create table tableA (ID int,B int,C int); insert into tableA values(1,1,10),(2,1,10),(3,1,11),(4,2,12),(5,2,13),(6,2,13) ,(7,3,14),(8,3,15),(9,3,16),(10,4,17),(11,4,18),(12,5,19); //抽出 select * from tableA where B IN ( select B from tableA group by B having count(*)=count(DISTINCT C) and count(*)>1 )
補足
ご返信あいりがとうございます。 早速試してみました。 しかしながら、この例の場合ID1,2,3,4,5,6が検索されませんでした。 フィールドBが同じであるが、フィールドCに一つでも違う値が入ったレコードを検索することはできますでしょうか? ID1,2,3は全てフィールドBが全て同じ値ですが、ID3のフィールドのCだけ違う値です。 ID4,5,6は全てフィールドBが全て同じ値ですが、ID4のフィールドのCだけ違う値です。 この例の場合はID12以外は全て検索したいと思っています。 厚かましくて大変申し訳ありません。いろいろ試してみましたが、SQL初心者の私には難しすぎてどうしてもできません。。
- yambejp
- ベストアンサー率51% (3827/7415)
何に一致するのでしょうか? たとえばこんな感じ SELECT * FROM テーブルA WHERE フィールドB='ほげ' AND NOT フィールドC='ほげ' 同じ文字を2度書くのが面倒なら、変数をつかってこんな感じ SELECT * FROM テーブルA WHERE フィールドB=(@VAL:='ほげ') AND NOT フィールドC=@VAL
補足
ご回答ありがとうございます。 スイマセン、私の質問が悪かったみたいです。 一致というのは同じ値を持ったものという意味で使っていました。 フィールドBの値が同であるが、フィールドCの値が同じではないレコードを検索したいと思っています。 どの値が同じであったり同じではないのかは分からない状態です。。
お礼
どうもありがとうございます。 大変助かりました!