• ベストアンサー

MySQLのクエリの質問です

テーブルAにフィールドBとフィールドCがあります。 phpmyadminを使って、フィールドBの値が一致するが、フィールドCの値が不一致のレコードを検索したいと思っています。 このような場合はどのようなクエリを書けばよろしいでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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個以上あるという条件です

sonadorchino
質問者

お礼

どうもありがとうございます。 大変助かりました!

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>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 )

sonadorchino
質問者

補足

ご返信あいりがとうございます。 早速試してみました。 しかしながら、この例の場合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)
回答No.1

何に一致するのでしょうか? たとえばこんな感じ SELECT * FROM テーブルA WHERE フィールドB='ほげ' AND NOT フィールドC='ほげ' 同じ文字を2度書くのが面倒なら、変数をつかってこんな感じ SELECT * FROM テーブルA WHERE フィールドB=(@VAL:='ほげ') AND NOT フィールドC=@VAL

sonadorchino
質問者

補足

ご回答ありがとうございます。 スイマセン、私の質問が悪かったみたいです。 一致というのは同じ値を持ったものという意味で使っていました。  フィールドBの値が同であるが、フィールドCの値が同じではないレコードを検索したいと思っています。 どの値が同じであったり同じではないのかは分からない状態です。。

関連するQ&A