- 2007 年 8 月 7 日 20:52
- MySQL
MySQL で例えば account テーブルと order テーブルがあり、order テーブルのすべてのレコードの type カラムのうちどれかと account テーブルの color カラムの値が同じだったら。という判断は ANY を使います。
SELECT `id` FROM `account` WHERE `color` = ANY (SELECT `type` FROM `order` WHERE 1);
こんな感じ。要するに「サブクエリの結果セットのうちどれかひとつ以上と等価」という条件なのですが、これを逆にする「サブクエリの結果セットのどれとも等価であってはならない」という条件を持たせる場合下記のようなクエリを投げると
SELECT `id` FROM `account` WHERE `color` != ANY (SELECT `type` FROM `order` WHERE 1);
失敗します。
これだと「サブクエリの結果セットのうちどれかひとつ以上と等価ではない」という条件になってしまいますよね。
正しくは
SELECT `id` FROM `account` WHERE (`color` = ANY (SELECT `type` FROM `order` WHERE 1)) != 1;
こうですね。
要するにちゃんと考えれば分かる事なのにとちった自分への戒めという意味です。
- 新しい: ニューパソコンを導入
- 古い: MySQL でビットの比較
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://spais.jp/mysql/%e2%80%9d%e3%81%93%e3%81%ae%e4%b8%ad%e3%81%ab%e3%81%af%e3%81%82%e3%82%8a%e3%81%be%e3%81%9b%e3%82%93%e2%80%9d%e3%81%a8%e3%81%84%e3%81%86%e5%88%a4%e6%96%ad/2007-08-07/trackback
- トラックバックの送信元リスト
- ”この中にはありません”という判断 - SPaiS より