我有联系人列表,然后我有被阻止的联系人列表。我需要查询未阻止的联系人。如何在sql查询中筛选出所有被阻止的联系人?
答案 0 :(得分:7)
PSEUDO SQL:
SELECT * FROM CONTACTS as c WHERE c.ID NOT IN (SELECT ID FROM BLOCKEDCONTACTS)
答案 1 :(得分:3)
另一个可能的解决方案是:
SELECT *
FROM TblContacts AS C
LEFT JOIN TblBlockedContacts AS BC
ON C.ID = BC.ID
WHERE C.ID IS NULL
我认为这应该比NOT IN更高效。
答案 2 :(得分:3)
您可以关注johan的代码,或者改变您的数据库。 而不是2个表,只需一个。然后添加另一个字段。您可以使用枚举类型为其命名状态(“已阻止,未阻止”);
然后执行此操作:
Select * from contacts where status = 'unblocked';
通过这种方式,您可以轻松地为sql处理器工作,因为它只访问一个表而不是连接2个或更多。
答案 3 :(得分:1)
我可以建议另一种变体:
SELECT *
FROM CONTACTS as c
WHERE NOT EXISTS (SELECT *
FROM BLOCKEDCONTACTS as B
WHERE c.id=b.id)
选择此变体或其他两个变体取决于您使用的DBMS和索引。