2011-12-13 22 views
0

存在しないレコードを検索する私に関係する奇妙なクエリをテストしました。一言で言えばMySQL - NULL値を検索

は、私が3 tablesています tbl_customers tbl_customers_notes tbl_customers_pipelines

お客様とNotesはかなり明白ですが、パイプラインはありません。基本的に、パイプラインは管理者が単一のcustomeridに割り当てられているものです。 |

ID:ここ

は、パイプラインのためのテーブル構造ですカスタマーサービス|管理者|

私はIDの列を作成する必要はありませんでしたが、とにかく、自動的にインクリメントされました。

すべての顧客レコードは、参加するパイプラインレコードなしで始まります。したがって、customeridが最初に作成されたときは空です。私はその新しい得意先を管理するために管理者を割り当てる、と単純に各adminIdにレコードを追加したい場合は、次の

ID | customerid | adminid 
--------------------------- 
1 | 45  | 6 
2 | 45  | 8 
3 | 45  | 10 

これは、得意先のことを意味します。45は、3 adminIdに割り当てられたのを持っています。

特定の管理者IDのメモが見つからない顧客IDを検索できる以下のクエリがあります。それはうまく動作します:

SELECT c.* 
FROM `tbl_customers` c 
LEFT JOIN `tbl_customers_pipelines` cp ON c.customerid = cp.customerid 
WHERE c.customerid 
      NOT IN(SELECT n.customerid 
       FROM `tbl_customers_notes` n 
       WHERE n.datesubmitted BETWEEN '2011-12-01 14:00:00' 
       AND '2011-12-03 13:59:59' 
       AND n.categoryid IN(10) 
       ) 

AND cp.adminid = 855 

私はWHERE句の後にサブクエリを実行していることがわかります。これは期待通りに機能します。私は特定のメモを持つ顧客レコードだけを表示しており、パイプラインテーブルに特定の管理IDを持っています。

私はこれを逆にしたいと思います。
パイプライン/管理レコードが完全にない顧客レコードを検索します。 私は本質的にメモを持っているが、adminidは付けられていない顧客IDを探しています。 これは私がクエリを構築する際の混乱に遭遇しているところです。

私の唯一の考えはとの "AND cp.adminid = 855" を置き換えることだった "とISNULL(cp.ID)"

そしてそれは結果を生成しません。しかし確かに記録があります。したがって、クエリはちょうどオフです。 誰かが私に行方不明を見ますか?

答えて

5

試してみてください。代わりに

AND cp.adminid = 855 
+0

AND cp.ID IS NULL 

が実際にその作品。 adminid = 855 ISNULLを指定することはできますか? (特定の管理者を絞っている、全員) – coffeemonitor

+0

いいえ、それはうまくいかないでしょう。あなたは管理者がいなくても顧客を探していませんか? – xbrady

+0

はい、あなたの提案をテストしたとき、私はその小さなアイテムを考えました。 しかし、それは問題ありません。あなたは元の質問に答えました。 – coffeemonitor