如何在SQL中获取两个表中不匹配的行?

如何在SQL中获取两个表中不匹配的行?,sql,sql-server,Sql,Sql Server,对不起,我把问题写得更清楚了: 谢谢一个选项在频道和订户表之间使用左连接: 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 = 'Jonn

对不起,我把问题写得更清楚了:


谢谢

一个选项在
频道
订户
表之间使用
左连接

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
c.ChanID | c.name | s.ChanID
1 |第一| 1

2 | second | NULL一个选项在
频道
订户
表之间使用
左连接

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
c.ChanID | c.name | s.ChanID
1 |第一| 1
2 |秒|空
试试这个

编辑: 我没有正确理解这个问题。如果要选择Jonny未订阅的行,请像这样使用子查询

 SELECT ChanID C FROM CHANNELS WHERE
(SELECT COUNT(*) FROM SUBSCRIBERS S WHERE S.ChanID=C.ChanID and S.nickname='Jonny') = 0
试试这个

编辑: 我没有正确理解这个问题。如果要选择Jonny未订阅的行,请像这样使用子查询

 SELECT ChanID C FROM CHANNELS WHERE
(SELECT COUNT(*) FROM SUBSCRIBERS S WHERE S.ChanID=C.ChanID and S.nickname='Jonny') = 0
这应能在其他条件下工作,可能不需要


这应该可以工作,其他条件可能不需要。

您可以使用
不在
不存在
…您可以使用
不在
不存在
…不清楚昵称发生了什么,您的数据/设计可能有问题。如果昵称检查使查询不起作用,则删除它们。不清楚昵称发生了什么,您的数据/设计可能有问题。如果昵称检查使查询不起作用,则删除它们。