2017-02-10 128 views

回答

3

一種選擇使用CHANNELSSUBSCRIBERS表之間的LEFT JOIN

SELECT c.ChanID, c.name 
FROM CHANNELS c 
LEFT JOIN SUBSCRIBERS s 
    ON c.ChanID = s.ChanID 
WHERE s.ChanID IS NULL AND 
     c.nickname = 'Jonny' AND  -- not sure about this condition 
     s.nickname = 'Jonny'   -- or this one 

這裏是一個視覺什麼中間表看起來像合併期間:

c.ChanID | c.name | s.ChanID 
1  | first | 1 
2  | second | NULL  <-- the second and third channels don't match 
3  | third | NULL  <-- to anything in the SUBSCRIBERS table (IS NULL) 
4  | fourth | 4 
+0

不清楚暱稱發生了什麼,您的數據/設計可能有問題。如果暱稱檢查使查詢無效,請將其刪除。 –

0
SELECT CHANNELS.ChanID FROM CHANNELS 
    LEFT JOIN SUBSCRIBERS ON CHANNELS.ChanID=SUBSCRIBERS.ChanID 
    WHERE 
    CHANNELS.type='public' AND 
    SUBSCRIBERS.nickname='a' 

試試這個

編輯: 我沒有得到正確的問題。如果要選擇Jonny未訂閱的行,請使用像這樣的子查詢。

SELECT ChanID C FROM CHANNELS WHERE 
(SELECT COUNT(*) FROM SUBSCRIBERS S WHERE S.ChanID=C.ChanID and S.nickname='Jonny') = 0 
0
select c.ChanID,C.name 
from Channels c Left join subscribers s on 
c.ChanID=s.ChanID 
where s.ChanID is null 

這應該工作的其他條件可能不是必需的。

相關問題