查询以查找所有没有关联的实体

时间:2011-02-03 13:49:57

标签: mysql

我有两个表,USERS和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 个答案:

答案 0 :(得分:2)

看起来你只需要一个“not in”而不是“&lt;&gt;”......这应该返回“不在”子查询中的用户列表。

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);

答案 1 :(得分: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)