2011-02-03 44 views
1

我有兩個表,用戶和USERS_ASSOCIATIONS查詢發現根本沒有相關的實體

爲了簡單起見,他們看起來像這樣

USERS  USERS_ASSOCIATION 
-----  -------------------------- 
|id |  |id |fk_id| fk_assoc_id | 
-----  -------------------------- 
| 1 |  | 1 | 1 | 2   | 
| 2 |  | 2 | 1 | 3   | 
| 3 |  -------------------------- 
| 4 | 
----- 

用戶可以互相關聯,以便與ID這個例子用戶1是關聯到用戶2和3,但不是4.

我試圖創建一個查詢,將查找所有未與特定用戶關聯的用戶。因此,對於用戶1的示例,查詢的結果將是4,如果用戶是2,則查詢的結果將是1,3和4,因爲用戶2沒有關聯。

迄今有這個

SELECT * from USERS WHERE AND USERS.id <> (SELECT * FROM USERS_ASSOCIATION as UA INNER JOIN USESR as U ON UA.fk_assoc_id = U.id AND UA.fk_id = 1); 

我知道這是不對的,子查詢返回所有被發現特定用戶的USER_ASSOCIATIONS的列表。

回答

2

看起來你只需要一個「不在」而不是「<>」......這應該返回「不在」子查詢中的用戶列表。

SELECT * 
from USERS 
WHERE AND USERS.id not in (SELECT * FROM USERS_ASSOCIATION as UA INNER JOIN USESR as U ON UA.fk_assoc_id = U.id AND UA.fk_id = 1); 
+0

感謝那些工作。 @John K. – JohnQuestIsASellOut 2011-02-03 14:09:10

1
select * 
from USERS 
where id <> 1 
and id not in (select fk_id from USERS_ASSOCIATION where fk_assoc_id = 1) 
and id not in (select fk_assoc_id from USERS_ASSOCIATION where fk_id = 1) 
相關問題