如何从mysql内连接查询中过滤结果

时间:2015-09-07 14:08:17

标签: php mysql many-to-many inner-join

我的多对多关系出了问题。

客户表格列 clientID,名称,地址等。

用户表格列 userID,名称,地址等。

Users_clients列: userID,clientID。

每个客户端都可以连接多个用户,用户可以拥有多个客户端。

现在我的users_clients表包含:

userID | clientID<br>
1      | 2
1      | 3
2      | 2
2      | 3
3      | 3
3      | 2
4      | 1

在我的php页面上,我想要一个尚未附加到客户端的用户列表。

实施例。如果我点击具有clientID = 3的客户端个人资料 它应该显示一个未附加到此客户端的用户列表。

SELECT u.name, u.email, u.userID FROM users u
  INNER JOIN users_clients uc
    ON u.userID = uc.userID 
  WHERE uc.clientID !=3

这样可以正常工作,但是如何创建我的MySQL查询,以便如果用户同时拥有clientID 3和客户端2,则不会显示。

此查询显示

1 | 2 2 | 2 3 | 2 4 | 1

我正在寻求的是:

3 | 2 4 | 1

希望这对你有意义。随意问:)

2 个答案:

答案 0 :(得分:0)

您可以采用不同的方式处理。

首先请求使用clientId = 3;

寻找每个用户
select u.id from users u
INNER JOIN users_clients uc
ON u.userID = uc.userID 
WHERE uc.clientID =3;

然后您可以使用此请求获取除clientId = 3之外的所有用户。

最终请求如下所示:

select u.id from users u where u.id NOT IN (select u.id from users u
INNER JOIN users_clients uc
ON u.userID = uc.userID 
WHERE uc.clientID =3);

希望这会有所帮助;

答案 1 :(得分:0)

您是否尝试过DISTINCT指令?

select distinct u.id from users u
INNER JOIN users_clients uc
ON u.userID = uc.userID 
WHERE uc.clientID =3;