あるデータベースに、別のデータベースにリストされていないユーザーのリストが必要ですnew_user_id
。両方のデータベースに112,815人の一致するユーザーがいます。user_id
すべてのクエリテーブルのキーです。
クエリ#1は機能し、new_user_Idとして参照されていない111,327人のユーザーを取得します。ただし、同じデータを2回クエリする必要があります。
-- 111,327 GSU users are NOT listed as a CSS new user
-- 1,488 GSU users ARE listed as a new user in CSS
--
select count(gup.user_id)
from gsu.user_profile gup
join (select cud.user_id, cud.new_user_id, cud.user_type_code
from css.user_desc cud) cudsubq
on gup.user_id = cudsubq.user_id
where gup.user_id not in (select cud.new_user_id
from css.user_desc cud
where cud.new_user_id is not null);
クエリ#2は完璧です...そして私はそれが構文的に受け入れられていることに実際に驚いています。しかし、それは私に意味のない結果を与えます。
-- This gives me 1,505 users... I've checked, and they are not
-- referenced as new_user_ids in CSS, but I don't know why the ones
-- that were excluded were excluded.
--
-- Where are the missing 109,822, and whatexcluded them?
--
select count(gup.user_id)
from gsu.user_profile gup
join (select cud.user_id, cud.new_user_id, cud.user_type_code
from css.user_desc cud) cudsubq
on gup.user_id = cudsubq.user_id
where gup.user_id not in (cudsubq.new_user_id);
2番目のクエリのwhere句は正確には何をしているのでしょうか。また、結果から109,822レコードが除外されているのはなぜですか。
注 上記のクエリは、私が本当に求めているものを単純化したものです。上記のクエリを実行する他の/より良い方法があります...それらは私に問題を与えているクエリの部分の単なる代表です。