请找小提琴 http://sqlfiddle.com/#!9/4a4aff/7
好友列表表
| id | user_id | Friend_id | status
| 1 | 1 | 24 | P
| 2 | 18 | 26 | P
用户表
| ID | email | password | ..N
| 1 | xx | xx | xx
| 2 | xx | xx | xx
从这两个表我希望得到列出的所有用户没有在朋友列表中状态为P或B的用户,使用连接似乎很简单但在wordpress中这个代码不起作用,查询如下。
select DISTINCT u.ID, u.user_nicename from wp_users u
LEFT JOIN friends_list f ON f.friend_id=u.ID
WHERE f.status NOT IN ('P', 'B')
答案 0 :(得分:3)
您必须使用如下所示的用户ID连接表:
LEFT JOIN friends_list f ON f.user_id = u.ID
select DISTINCT u.ID, u.user_nicename from wp_users u
LEFT JOIN friends_list f ON f.user_id=u.ID
WHERE f.status NOT IN ('P', 'B')
在 friends_list 表格中添加两条记录,其中包含 Q 和 Z 状态以进行测试
INSERT INTO `friends_list` (`id`, `user_id`, `Friend_id`, `status`) VALUES
(80, 1, 26, 'P'),
(79, 18, 26, 'P'),
(78, 1, 24, 'P'),
(79, 20, 24, 'Q'),
(80, 21, 24, 'Z');
答案 1 :(得分:2)
根据我的理解,除了那些有P或B状态的用户外,你想要所有用户。要获得那些在friends_list表中没有值的用户,您可以在查询中添加空检查。
select DISTINCT u.ID, u.user_nicename from wp_users u
LEFT JOIN friends_list f ON f.friend_id=u.ID
WHERE f.status NOT IN ('P', 'B') OR f.status IS NULL
我也不确定你是否加入了正确的专栏?它应该是user_id而不是friend_id吗?
答案 2 :(得分:1)
只需像这样更改绑定列: -
select DISTINCT u.ID, u.user_nicename from wp_users u
LEFT JOIN friends_list f ON f.user_id=u.ID
WHERE f.status NOT IN ('P', 'B');
答案 3 :(得分:1)
更改您的查询,如下所示。如果您只想要第一个表中的数据,那么不需要连接查询只使用内部查询
select DISTINCT u.ID, u.user_nicename from wp_users u WHERE u.ID not in
(select f.friend_id from friends_list f where f.status IN ('P', 'B')) order by u.ID;
修改强>
select DISTINCT u.ID, u.user_nicename from wp_users u
LEFT JOIN friends_list f ON f.friend_id=u.ID
WHERE f.status NOT IN ('P', 'B') OR f.status IS NULL ORDER BY u.ID
答案 4 :(得分:1)
您可以使用此查询,您的小提琴显示空白结果,因为您只有P Status的数据,尝试添加一个具有其他状态的条目,然后您将获得结果。
select DISTINCT u.ID, u.user_nicename from wp_users u left join friends_list f
on f.friend_id=u.ID where f.status is NULL