【发布时间】:2017-02-11 14:04:43
【问题描述】:
我正在使用 3 个具有以下名称和列的表:
*Table 1*
**Users**
UserID UserName UserTypeNumber
1 John 1N
2 Mary 1N
3 Doe 1N
4 Sullivan 2N
5 Sally 1N
**Key = UserID**
*Table 2*
**MobileUsers**
Userid MobileAccess
1 Yes
2 Yes
3 Yes
4 Yes
5 No
**Key = UserID**
*Table 3*
**PanCards**
UserID CARD_NUMBER
3 2222
4 3333
5 1111
密钥 = 用户 ID
解释:
- Users 和 MobileUsers 表中的每个用户都可用 但是,并非所有用户都出现在 PanCards 表中。这是 因为只有分配了卡片的用户才会出现在 PanCards 表。在这种情况下,UserID=3 的 Doe 和 UserID=4 的 Sullivan 有一张卡片,因此它们出现在 PanCards 表中
问题:
- 我想要实现的是过滤掉用户 MobileUsers 表的 MobileAccess 等效于 Yes 并且其 UserTypeNumber 等效于 1N Users 表,但不存在于 PanCards 表中。
到目前为止,我所拥有的是以下 SQL 查询:
SELECT MobileUsers.Userid, MobileUsers.MobileAccess
FROM MobileUsers
INNER JOIN Users
ON MobileUsers.Userid = Users.UserID
INNER JOIN PanCards
ON Users.UserID = PanCards.UserID
WHERE MobileUsers.MobileAccess = 'Yes'
AND
Users.UserTypeID = '1N'
AND
MobileUsers.Userid NOT IN
(SELECT PanCards.UserID FROM PanCards)
结果是一个空表
Userid MobileAccess
但是我想要的是返回以下结果:
Userid MobileAccess
1 Yes
2 Yes
请问我该如何解决这个问题并获得正确的结果?
【问题讨论】:
-
您正在使用 PanCards 进行 INNER JOIN,这意味着该表中必须有一行。删除该连接
标签: sql sql-server sql-server-2008 sql-server-2012