如何从两个表中查询,但仅从一个表中获取结果?

时间:2009-10-13 07:12:10

标签: sql

我有联系人列表,然后我有被阻止的联系人列表。我需要查询未阻止的联系人。如何在sql查询中筛选出所有被阻止的联系人?

4 个答案:

答案 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和索引。