存在しないレコードを検索する私に関係する奇妙なクエリをテストしました。一言で言えば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)"
そしてそれは結果を生成しません。しかし確かに記録があります。したがって、クエリはちょうどオフです。 誰かが私に行方不明を見ますか?
の
が実際にその作品。 adminid = 855 ISNULLを指定することはできますか? (特定の管理者を絞っている、全員) – coffeemonitor
いいえ、それはうまくいかないでしょう。あなたは管理者がいなくても顧客を探していませんか? – xbrady
はい、あなたの提案をテストしたとき、私はその小さなアイテムを考えました。 しかし、それは問題ありません。あなたは元の質問に答えました。 – coffeemonitor