我有两个SQL Server表:CHANNELS
& SUBSCRIBERS
,我想从CHANNELS
行没有在SUBSCRIBERS
一些条件存在。如何获取SQL中两个表中不匹配的行?
我试过INNER
和OUTER(LEFT) JOIN
但它没有为我工作,他们都给了我同样的答案,这不是我想要的。
的表是这样的:
渠道表:
CREATE TABLE CHANNELS
(
ChanID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) PRIMARY KEY,
name varchar(30) NOT NULL,
type varchar(10) NOT NULL,
description varchar(500) NOT NULL,
nickname varchar(20) NOT NULL
REFERENCES USERS(nickname),
subscribersnum int NOT NULL
)
SUBSCRIBERS表:
CREATE TABLE SUBSCRIBERS
(
nickname varchar(20) NOT NULL REFERENCES USERS(nickname),
ChanID int NOT NULL REFERENCES CHANNELS(ChanID)
)
外键nickname
从一些所谓的其它表取USERS
比方说,在渠道我们有以下行:
CHanID | type | name | description | (createdby) | subscribersnum
| | | | nickname |
-------------------------------------------------------------------------
1 public first hi Matty 3
2 public second hii Rose 2
3 private third hiii Matty 2
4 public forth hiiii Lucy 5
和SUBSCRIBERS
我们:
nickname | ChanID
------------------------
Jonny 1
Matty 3
Jonny 4
Rose 3
Rose 2
我想选择所有公共通道的ID和具有昵称“Jonny”的用户尚未订阅的名称,因此在上面的示例中,我希望查询返回两行:
个ChanId | name
-----------------
2 second
,我所做的查询是这样的:
SELECT
CHANNELS.ChanID
FROM
CHANNELS
LEFT JOIN
SUBSCRIBERS ON (CHANNELS.type = 'public'
AND SUBSCRIBERS.nickname = 'Jonny'
AND CHANNELS.ChanID != SUBSCRIBERS.ChanID);
SELECT
CHANNELS.ChanID
FROM
CHANNELS
INNER JOIN
SUBSCRIBERS ON (CHANNELS.type = 'public'
AND SUBSCRIBERS.nickname = 'Jonny'
AND CHANNELS.ChanID != SUBSCRIBERS.ChanID);
但他们没有做什么,我需要。
有什么建议吗?
谢谢
这是完全很好,谢谢! – user6561572