存在しないレコードを検索するという奇妙なクエリをテストしました。
一言で言えば、私は3つ持っていますtables:
tbl_customers
tbl_customers_notes
tbl_customers_pipelines
顧客とメモはかなり明白ですが、パイプラインはそうではありません。基本的に、パイプラインは、管理者が1つのに割り当てられるものcustomeridです。
パイプラインのテーブル構造は次のとおりです。
ID | customerid | adminid |
列を作成する必要はありませんでしたがID、とにかく作成しました。自動インクリメントされます。
すべての顧客レコードは、パイプラインレコードの結合なしで始まります。したがって、customeridが最初に作成されたときは空です。その新しいcustomeridを管理するように管理者を割り当て、各adminidのレコードを追加するだけの場合:
ID | customerid | adminid
---------------------------
1 | 45 | 6
2 | 45 | 8
3 | 45 | 10
これは、customerid:45に3つのadminidが割り当てられていることを意味します。
(ところで、adminidはsales pplのようなものです)
特定の管理者からメモが欠落しているcustomeridを検索できるクエリを以下に示します。そしてそれは素晴らしい働きをします:
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句の後にサブクエリを実行していることに気付くでしょう。そして、これは期待どおりに機能します。特定のメモがあり、パイプラインテーブルに特定の管理者がいる顧客レコードのみを表示しています。
これと逆のことをしたいです。
そして、パイプライン/管理者レコードが完全に欠落している顧客レコードを検索します。私は基本的にメモが付いているcustomeridを探していますが、adminidは添付されていません。そして、これは私がクエリを構築する際にいくつかの混乱に遭遇しているところです。
私の唯一の考えは、「AND cp.adminid =855」を「ANDISNULL(cp.ID)」に置き換えることでした。
そして、それは結果を生み出しません。しかし、確かに記録があります。したがって、クエリはオフになっています。誰かが私が欠けているものを見ますか?