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

假設目前 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

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

阅读 2.1k
3 个回答

看你写的条件是 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);

注意表名和你的不一样。

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

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

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

AND cs.prod_id IS NULL

这句导致的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题