假設目前 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
我發現這樣寫啥都不給印?
試試看 EXCEPT 這個用法吧
select prod_id , user_id from user_cart
EXCEPT
select prod_id , user_id from user_cart_stock
也可以從GOOGLE搜尋 [ MSSQL 比對兩個資料表 ] 這樣的關鍵字
可以找到不少解法
如果是Oracle資料庫可以用以下的
SELECT PROD_ID
FROM UC
WHERE USER_ID = 1
MINUS
SELECT PROD_ID
FROM CU
WHERE USER_ID = 1
我猜你是這樣想像你的表的
uc.prod_id / uc.user_id / cs.prod_id / cs.user_id
102 / 1 / 102 / 1
103 / 1 / null /null
但實際是這樣的
uc.prod_id / uc.user_id / cs.prod_id / cs.user_id
102 / 1 / 102 / 1
所以當你的條件時成立時,會找不到東西,
SELECT * FROM uc JOIN cs ON cs.prod_id = uc.prod_id
如果不太明白的話,你可以想成下面這樣,
cs.prod_id = uc.prod_id
uc.prod_id = 103
但不等於
cs.prod_id = null
so null
如果是想要把uc當成主表來連結的話,可以用以下的寫法。
SELECT *
FROM uc
left JOIN cs ON cs.prod_id = uc.prod_id
WHERE uc.user_id = 1
AND cs.prod_id IS NULL