• 締切済み

列視点ではなく、行視点での検索をしたい。

 1/1 1/2 1/3 A社 a b b B社 b b b C社 b b a といったMySQLでのデータベースがあるとして、 「aが一回でもある場合は表示したくない」と思った場合、 PHP等で全件取得してからaを探す方法ではなく、SQLクエリとして何かコマンドはあるのでしょうか?

みんなの回答

回答No.3

#2回答者です。 #2のSQLで、最後の括弧は不要なので訂正。 having sum(data='a')=0) ↓ having sum(data='a')=0

すると、全ての回答が全文表示されます。
回答No.2

もう少し丁寧に、次のような事項について明示するようにしてください。 1/1、1/2、1/3って、日付なのでしょうかね?個数は固定されているのでしょうか? (1)MySQLのバージョン (2)テーブルの列構成と、そのデータ型 (3)母体データ例 ・・・操作対象としたいものに加え、操作対象としたくないデータ (4)得たい結果例 (5)自分なりに考えたSQLなど ・・・ここの利用規約では、「自分なりにどう考えたが、どの部分が具体的に分からないか示す」ことになっています。つまり、「仕様を提示して、SQLを作って」的な書き込みは、せっかく回答があっても、規約違反になり、削除されてしまう可能性があります。 扱いにくいテーブル構造になっていますが、正規化をする気はないのですか? http://www1.neweb.ne.jp/wb/oigom/sad/reference/normalize.html SQLの特長である柔軟な操作を、生かせなくなりますよ? また、否定形の条件式では、性能も出せません。 それでも、どうしても現在のテーブル構造でやりたいというなら、お勧めしませんが次のような感じです。 -- どのRDBMSでも実行可能 select * from tbl1 where 一昨日<>'a' and 昨日<>'a' and 今日<>'a' ; -- MySQLの独自機能であるfield関数を使った例 select * from tbl1 where field('a',一昨日,昨日,今日)=0 ; もし、私ならこういった情報を管理する場合、(会社名、日付、データ)といった列構成にし、「データ」には'a'や'b'など、何れか1個だけ持ちます。 この場合のSQLは、例えば次のような感じ。 select c_name from tbl1 group by c_name having sum(data='a')=0) なお、data='a'が真の場合は1、偽の場合は0を返して、それをsumで集計したりできるのは、MySQLの独自仕様だったと思います。 なお、MySQLでは未実装ですが、列に配列を使えるRDBMSもあります。そういったRDBMSでは、今回のようなテーブルを比較的容易に実装できますが、配列の使用を必ずしも推奨していません。 また、SQL99で、配列も標準SQL入りしました。 http://www.atmarkit.co.jp/fnetwork/tokusyuu/01sql99/sql99_1a.html MySQLも、将来的には実装する可能性はあると思います。

すると、全ての回答が全文表示されます。
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

チェックしたいカラム数、カラム名が固定なら、以下のようにどのカラムも"a"でないことをチェックすればいいのでは? select * from `table_name` where (`column1` != "a") and (`column2` != "a") and (`column3` != "a")

すると、全ての回答が全文表示されます。

関連するQ&A