我无法理解查询,我找到了解决方法来获取数据,但我想知道发生了什么。
所以基本上我想获得未包含在另一个表中的所有ID。如果我把它们分开计算,我会得到这个:
select count(distinct product_sid)
from gaps_inp.pim_product_channel pc
where pc.channel_code = 'Amazon'
计数
200658
然后计算另一张桌子上的项目:
select count(w.sid)
from gaps_fend.product_whitelist w
where w.channel_code = 'Amazon'
计数
39697
但现在如果我试着计算差异:
select count(*)
from gaps_inp.pim_product_channel pc
where pc.channel_code = 'Amazon'
and pc.product_sid not in (
select w.sid
from gaps_fend.product_whitelist w
where w.channel_code = 'Amazon'
);
计数
0
两个字段 gaps_inp.pim_product_channel.product_sid 和 gaps_fend.product_whitelist.sid bigint
我能够通过使用左连接和,其中sid为空来实现,但我仍然想知道我在不在查询中。
这是解决方法:
select count(distinct pc.product_sid)
from gaps_inp.pim_product_channel pc
left join gaps_fend.product_whitelist w on w.channel_code = 'Amazon' and pc.product_sid = w.sid
where pc.channel_code = 'Amazon'
and w.sid is null;
计数
160968
答案 0 :(得分:2)
请确保以下查询
中存在一些NULL
值
select w.sid
from gaps_fend.product_whitelist w
where w.channel_code = 'Amazon'
当NOT IN
返回任何sub-query
值时, NULL
失败,因此您的计数为零。因此,解决方法是使用LEFT JOIN
或NOT EXISTS
或在IS NOT NULL
中添加sub-query
条件
NOT EXISTS
方法可以处理NULL
值
SELECT Count(*)
FROM gaps_inp.pim_product_channel pc
WHERE pc.channel_code = 'Amazon'
AND NOT EXISTS (SELECT 1
FROM gaps_fend.product_whitelist w
WHERE w.channel_code = 'Amazon'
AND w.sid = pc.product_sid);
答案 1 :(得分:0)
not in
不返回任何行
添加and w.sid is not null