iT邦幫忙

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

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

something iT邦新手 5 級 ‧ 2018-10-28 17:10:06 檢舉
不是我發明的,但我叫這個舉手比較法。

with cte_u_c as
(
select distinct
prod_id
,user_id
,1 as u_c
,0 as c_s
from uc
),

cte_c_s as
(
select distinct
prod_id
,user_id
,0 as u_c
,1 as c_s
from cs
),

cte_union as
(
select
*
from cte_u_c

union all

select
*
from cte_c_s
)

select
prod_id
,user_id
,sum(u_c) as u_c
,sum(c_s) as c_s
from
cte_union
group by
prod_id
,user_id
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
rogeryao
iT邦大師 1 級 ‧ 2018-10-28 16:51:14
最佳解答
小魚 iT邦大師 1 級 ‧ 2018-10-28 18:20:05 檢舉

我倒是沒用過 Full Outer Join

犬千賀 iT邦新手 3 級 ‧ 2018-10-29 10:48:27 檢舉

Full Outer Join 讓我起雞母皮XDD

4
小魚
iT邦大師 1 級 ‧ 2018-10-28 18:20:55

我說,
你的問題也太多了吧,
兩個月250個問題,
你先好好把基本的語法都學好實作過,
再來問吧...

0
三千
iT邦新手 5 級 ‧ 2018-10-29 09:22:38

試試看 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

三千 iT邦新手 5 級 ‧ 2018-10-31 14:02:58 檢舉

其實是我沒注意看是MYSQL的需求XD

三千 iT邦新手 5 級 ‧ 2018-10-31 14:23:24 檢舉

如果 MYSQL 不支援 MINUS

那可以試試看

SELECT DISTINCT prod_id , user_id 
FROM user_cart as uc
WHERE (prod_id, user_id) NOT IN
(SELECT prod_id, user_id FROM user_cart_stock)
0
watain666
iT邦新手 5 級 ‧ 2018-10-29 11:35:44

不會 Join 可以用 Subquery...

0
s20050253004
iT邦新手 5 級 ‧ 2018-10-29 14:40:16

如果是Oracle資料庫可以用以下的
SELECT PROD_ID
FROM UC
WHERE USER_ID = 1
MINUS
SELECT PROD_ID
FROM CU
WHERE USER_ID = 1

或是
SELECT UC.PROD_ID
FROM UC, CU
WHERE CS.PROD_ID(+) = UC.PROD_ID AND UC.USER_ID = 1 AND CS.PROD_ID IS NULL;

0
ty201457
iT邦新手 5 級 ‧ 2018-10-29 19:12:45

我猜你是這樣想像你的表的

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

我要發表回答

立即登入回答