选择我不关注的所有用户

时间:2014-08-15 15:29:01

标签: sql sql-server

我有两张桌子:

Users (id nvarchar(255), name)
| 1 | A |
| 2 | B |
| 3 | C |
| 4 | A |
| 5 | A |

Followers (userId nvarchar(255), followId nvarchar(255), datetime)
| 1 | 2 | 6/11/2014 |

我们说我是用户1,我需要选择所有名称为' A'我还没有跟进。对于上述情况,select应返回:

| ID | Name |
| 4  |   A  |
| 5  |   A  |

如何使用SQL查询执行此操作?

我尝试使用以下查询:

select u.id
from users u
left join followers f on u.id=f.userId
where f.id <> @userId

4 个答案:

答案 0 :(得分:0)

轻松查询,您只需使用NOT IN条件。

SELECT * FROM Users WHERE 
Name = MyName AND ID NOT IN (SELECT followIdFROM Followers WHERE userId = MyId)

WHERE MyName是用户名,MyId是用户ID,但是你检索它们

答案 1 :(得分:0)

以下查询应该可以正常工作,但我没有经过测试

Select Id, Name from users Where Name =users.Name AND (Id not in (select followId from Followers where UserId = users.id) OR Id <> users.Id  )

答案 2 :(得分:0)

这是一个使用连接的方法。

SELECT U.ID, U.Name
FROM Users U
LEFT JOIN followers F
 on U U.ID = F.FollowID
WHERE
 u.Name = 'A'
 and U.ID <> 1
 AND F.FollowID is null

我告诉现有的陈述通常运作得更快......所以这可能会更好。

SELECT ID, Name 
FROM users U
WHERE NOT Exists 
 (SELECT 1 
  FROM followers F
  INNER JOIN Users U2
    ON F.User_ID = U2.ID
  WHERE U.ID = F.FollowID)
 and U.Name = 'A')

答案 3 :(得分:0)

select u.id,u.name
from users u
left join followers f on u.id=f.userId
 and f.id <> @userId
where u.name='A'