MySQL-选择联接表中计数等于1的行
仅当另一个称为“web_用户\u分支”的联接表的行等于1时,我才需要从表“web_用户”中选择行 我现在所拥有的: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
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用户有重复项,它会失败,这是真的,但问题中没有给出这种情况。我的目标是避免子选择。