2017-02-10 174 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 

这应该工作的其他条件可能不是必需的。

相关问题