2009-10-13 64 views
0

我有聯繫人列表,然後我有阻止的聯繫人列表。我需要查詢未被阻止的聯繫人。我怎樣才能查詢所有被阻止的聯繫人在SQL查詢內過濾掉?如何從兩個表格中查詢,但僅從一個表格中獲取結果?

+0

更新:感謝所有答案,我想知道如何限制這些結果,因爲當我將我的LIMIT添加到Rudolph的sql查詢時,我的查詢失敗。 – newbie 2009-10-13 07:51:37

+0

好吧,現在當我添加LIMIT到該查詢結束時它就起作用了。 thanx適用於所有回覆 – newbie 2009-10-13 07:56:20

回答

7

僞SQL:

SELECT * FROM CONTACTS as c WHERE c.ID NOT IN (SELECT ID FROM BLOCKEDCONTACTS) 
3

另一種可能的解決方案,這將是:

SELECT  * 
FROM  TblContacts AS C 
LEFT JOIN TblBlockedContacts AS BC 
ON   C.ID = BC.ID 
WHERE  C.ID IS NULL 

我想這應該是比沒有更高性能。

1

我可以建議另一種變體:

SELECT  * 
FROM  CONTACTS as c 
WHERE  NOT EXISTS (SELECT * 
         FROM  BLOCKEDCONTACTS as B 
         WHERE  c.id=b.id) 

選擇這個變體或任何兩個人都依賴於DBMS和您使用索引。

3

你可以關注johan的代碼,或者改變你的db。 取而代之的是2個表格,只需要一個表格。只需添加另一個字段。您可以使用枚舉類型命名它的狀態(「已阻止,未阻止」);

然後執行此:

Select * from contacts where status = 'unblocked'; 

通過這種方式,你能不能把SQL處理器輕鬆的工作,因爲它僅訪問一個表,而不是加入2以上。

相關問題