MySQL-选择联接表中计数等于1的行

MySQL-选择联接表中计数等于1的行,mysql,select,count,Mysql,Select,Count,仅当另一个称为“web_用户\u分支”的联接表的行等于1时,我才需要从表“web_用户”中选择行 我现在所拥有的: SELECT id, code from web_users JOIN ( SELECT client_code FROM web_users_branches HAVING COUNT(*) = 1 ) as t2 ON web_users.code = t2.client_code; 我得到的结果是空的 数据库示例: Web用户表: id code 1 0001 2

仅当另一个称为“web_用户\u分支”的联接表的行等于1时,我才需要从表“web_用户”中选择行

我现在所拥有的:

SELECT id, code from web_users 
JOIN
(
SELECT client_code
  FROM web_users_branches
HAVING COUNT(*) = 1
) as t2
ON web_users.code = t2.client_code;
我得到的结果是空的

数据库示例:

Web用户表:

id code
1  0001
2  0002
3  0003
Web用户分支表:

id  client_code
1   0001
2   0001
3   0002
4   0003
5   0003
现在在这个查询之后,我应该只得到客户机代码为0002的用户,因为所有其他用户客户机代码计数都不等于1(有x20003和x20001)。有什么想法吗

SELECT id, code 
FROM web_users_branches as t1
JOIN  web_users as t2
ON t2.code = t1.client_code
HAVING COUNT(*) = 1

应该有用。在内部联接之后,当两个(!)表的开头只有一条记录时,您只能得到一行。

我想您只需要在子查询中添加一个
分组依据:

SELECT u.id, u.code 
FROM web_users u JOIN
     (SELECT client_code
      FROM web_users_branches
      GROUP BY client_code
      HAVING COUNT(*) = 1
     ) c
     ON u.code = c.client_code;

为什么这么复杂?您只需加入并限制结果集
的计数(*)=1
@Psi。(1) 因为这并不复杂。(2) 即使
web\u用户
有重复项,这也有效。(2)是真的。(1) 可能会受到个人意见的影响,但我尽量避免次选择。虽然这个答案通常不起作用(因为当
web\u用户
有重复项时它会失败),但它绝对不值得投反对票。如果web\u用户有重复项,它会失败,这是真的,但问题中没有给出这种情况。我的目标是避免子选择。