如何在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
这应能在其他条件下工作,可能不需要
这应该可以工作,其他条件可能不需要。您可以使用不在
或不存在
…您可以使用不在
或不存在
…不清楚昵称发生了什么,您的数据/设计可能有问题。如果昵称检查使查询不起作用,则删除它们。不清楚昵称发生了什么,您的数据/设计可能有问题。如果昵称检查使查询不起作用,则删除它们。