找出兩個數據表中不存在的那些數據

发布于 2022-09-11 14:49:17 字数 419 浏览 15 评论 0

假設目前 user_id = 1

uc數據表

prod_id / user_id
102 / 1
103 / 1

cs數據表

prod_id / user_id
102 / 1

我想找出 103 ,也就是uc數據表有,但cs數據表沒有的那些數據

SELECT
    uc.prod_id
    FROM `user_cart` as uc 
    JOIN `user_cart_stock` as cs ON cs.prod_id = uc.prod_id
    WHERE uc.user_id = 1
    AND cs.prod_id IS NULL

我發現這樣寫啥都不給印?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

自在安然 2022-09-18 14:49:17

使用子查询的同时可以将not in改为not exists使得查询优化

select uc.prod_id from `uc`
where not exists (select `prod_id` from cs where prod_id=uc.prod_id);
一抹微笑 2022-09-18 14:49:17

建议看一下这四个join--->left join,right join,inner join,out join。
没有数据是因为你最后那个条件

AND cs.prod_id IS NULL

这句导致的

埋葬我深情 2022-09-18 14:49:17

看你写的条件是 uc.user_id = 1 和 cs.prod_id IS NULL,并且是内连查询, 这样是查询不到的103的。

方案一:改用左连接

SELECT uc.prod_id FROM `uc` as uc  
LEFT JOIN `cs` as cs 
ON cs.prod_id = uc.prod_id 
WHERE uc.user_id = 1 
AND cs.prod_id IS NULL


方案二:使用子查询(数据量大的话性能差点)

select uc.prod_id from `uc`
where `prod_id` not in (select `prod_id` from cs);

注意表名和你的不一样。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文